Страницы

Поиск по вопросам

четверг, 2 апреля 2020 г.

Удалить элемент ассоциативного массива по ключу? [дубликат]

#php #массивы

                            
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            PHP: Как сделать поиск на соответствие значению в массиве?
                                
                                    (2 ответа)
                                
                        
                Закрыт 2 года назад.
            
        

Есть большой двух уровненный массив, первый ключ число, второй строка, кирилица,
и есть файл со списком ключей которые нужно удалить.
Как можно удалить нужные ключи из этого массива? 

как пробовал делать:

$file3=file("ignore.txt");

print_r($sparam2[0]);
print_r($sparam2[2]);

for ($i = 0; $i ";
    unset($sparam2[$i][$keys4]);    
    }
}   


прикол в том, что даже строка echo $sparam2[$i][$keys4].""; ничего не выводит, echo
 $keys4 выводит нужный ключ.

вот результат вывода элементов (пример массива)

print_r($sparam2[0]);
 print_r($sparam2[2]);

Array
(
    [Название] => Название
    [Код Русского Света] => Код Русского Света
    [Артикул] => Артикул
    [Бренд] => Бренд
    [Цена] => Цена
    [Длина] => Длина
    [Источник света] => Источник света
    [Исполнение] => Исполнение
    [Аккумуляторный] => Аккумуляторный
    [Материал] => Материал
    [Тип батареи] => Тип батареи
    [Водонепроницаемый] => Водонепроницаемый
    [Цвет корпуса] => Цвет корпуса
    [Наличие на складе] => Наличие на складе
    [Ширина] => Ширина
    [Высота] => Высота
    [Тип светильника] => Тип светильника
    [Способ монтажа] => Способ монтажа
    [Тип цоколя] => Тип цоколя
    [Мощность лампы] => Мощность лампы
    [Класс защиты от поражения электрическим током] => Класс защиты от поражения
электрическим током
    [Материал корпуса] => Материал корпуса
)
Array
(
    [Название] => Фонарь S-LD043-B Silver Uniel UL-00000191
    [Код Русского Света] => 413391
    [Артикул] => UL-00000191
    [Бренд] => Uniel 
    [Цена] => 116.82
    [Длина] => 88 мм
    [Источник света] => Светодиод
    [Исполнение] => Карманный фонарь цилиндрической формы
    [Аккумуляторный] => Нет
    [Материал] => Алюминий
    [Тип батареи] => Мизинчиковый
    [Водонепроницаемый] => Да
    [Цвет корпуса] => Серебристый
    [Наличие на складе] => Штука
    [Ширина] => 
    [Высота] => 
    [Тип светильника] => 
    [Способ монтажа] => 
    [Тип цоколя] => 
    [Мощность лампы] => 
    [Класс защиты от поражения электрическим током] => 
    [Материал корпуса] => 
)


Для примера в файле игнора два ключа 
Материал
Тип батареи

Их нужно исключить из этого массива.
    


Ответы

Ответ 1



Немного не правильно. Как вы можете удалять елемент из массива и динамически проверять его размер? Нужный код должен быть примерно такой (если конечно данные из файла валидные, а то вы file используете без параметров...): $file3=file("ignore.txt"); print_r($sparam2[0]); print_r($sparam2[2]); // индекс 2 ??? это не ошибка? $nof_params = count($sparam2); $file3_count = count($file3); $array_to_delete = array(); //создаем массив елементов для удаления for ($i = 0; $i <$nof_params; $i++) { for ($j = 0; $j <$file3_count; $j++) { $keys4=$file3[$j]; echo $sparam2[$i][$keys4]."
"; array_push($array_to_delete, array($i, trim($keys4))); } } for($i = 0; $i < count($array_to_delete); $i++) { $ii = $array_to_delete[$i][0]; $keys4 = $array_to_delete[$i][1]; unset($sparam2[$ii][$keys4]); }

Ответ 2



Неоднократно уже поднимались тут вопросы связанные с функцией file(). Если ее используют без настройки вторым параметром, получают не то, что хотели. $file3 = file("ignore.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); где FILE_IGNORE_NEW_LINES - Не добавлять новую строку к концу каждого элемента массива FILE_SKIP_EMPTY_LINES - Пропускать пустые строки

Комментариев нет:

Отправить комментарий