Как удалить все нулевые значения внутри массива, который заключен в ассоциированный массив, в PHP?

Мой вопрос может показаться довольно простым, но я пробовал несколько методов, и ни один из них не дает правильного ответа.

У меня есть ассоциативный массив следующим образом:

$array = array("TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
);

Теперь я хотел бы удалить все нулевые элементы в моих массивах для соответствующего ассоциативного массива.

Моя попытка была следующей:

foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}

print_r($array);

Но мой вывод также повторно использует индексы массива. Мой вывод выглядит следующим образом:

Array
(
[TB1_course] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)

[TB1_section] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)

[TB1_session] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)

)

Я хотел бы удалить индексы, чтобы в моих массивах было только два элемента. «CHEM 2E03» должен быть 0-м индексом, а «BIO 1A03» должен быть 1-м индексом. Я использую PHP 5.4.

0

Решение

array_values() Функция сохраняет значение и сбрасывает индексированный массив. Ниже это реализация для ваших целей:

foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key] = array_values($value);
}
}
1

Другие решения

Вы можете использовать array_values() функция для повторного индексирования вашего массива.

1

С помощью unset() удаляет значение, но сохраняет ключ как есть.
Лучшее решение здесь будет использовать array_splice() который удалит элемент полностью.
Для вашего кода это должно быть

array_splice($value, $i, 1);

вместо

unset($value[$i]);
0

пытаться

foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}

$arr = array_map('array_values', $array);
print_r($arr);
0

Вы можете использовать function тогда это будет рекурсивно фильтровать и сбрасывать ваш индекс, используя array_filter а также array_values

function array_filter_recursive($input)
{
foreach ($input as &$value)
{
if (is_array($value))
{
$value = array_filter_recursive($value);
}
}
return array_values(array_filter($input));
}

$array = [
"TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
];

print_r(array_filter_recursive($array));

Вот phpfiddle для запуска выше: http://phpfiddle.org/main/code/cgbj-h10z

Ресурсы
1. http://php.net/manual/en/function.array-filter.php
2. http://php.net/manual/en/function.array-values.php

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector