PHP смешанный ассоциативный массив, как получить значения в цикле foreach

Ну у меня что то типа

$Arr1 = array("a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
"a3",
"a4",
"a5" => array("a5b", "a5b")
);

Мне нужно пройти цикл foreach, чтобы получить $key => $value пара и единственный ключ, где нет значения.

Должно быть что-то с проверкой isset($value) но это не работает

Заметка: Я не знаю ключей, поэтому не могу позвонить $Arr1["a3"] непосредственно

ОБНОВИТЬ:
Вопрос закрыт. Спасибо всем. Как было написано, ключ без значения является не ключом, а значением с целочисленным ключом по умолчанию. Так что, если кто-то хочет использовать структуру выше, сделайте это

 foreach ($Arr1 as $key => $value) {
if (is_int($key)) {
$key = $value;
$value = null;
}
//using $key and $value
}

-1

Решение

Каждый элемент массива имеет свой ключ. «a3» и «a4» не являются клавишами, они являются элементами, которые имеют цифровые клавиши. Вы убедитесь, что если вы делаете var_dump этого массива

array (size=5)
'a1' =>
array (size=2)
0 => string 'a1b' (length=3)
1 => string 'a1b' (length=3)
'a2' =>
array (size=2)
0 => string 'a2b' (length=3)
1 => string 'a2b' (length=3)
0 => string 'a3' (length=2)
1 => string 'a4' (length=2)
'a5' =>
array (size=2)
0 => string 'a5b' (length=3)
1 => string 'a5b' (length=3)

Вы можете получить элементы с цифровыми клавишами с array_filter функция и проверка типа ключа (например, с помощью is_int функция)

$arr = array(
"a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
"a3",
"a4",
"a5" => array("a5b", "a5b")
);

$newArr = array_filter($arr, function($key) {
return is_int($key);
}, ARRAY_FILTER_USE_KEY);

или же foreach заявление:

$arr = array(
"a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
"a3",
"a4",
"a5" => array("a5b", "a5b")
);

$newArr = [];
foreach ($arr as $key => $value) {
if (is_int($key)) {
$newArr[] = $value;
}
}
2

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

Ваш массив выглядит странно, так как вы смешиваете ключи и значения типа «a #». Это эквивалентно:

$Arr1 = array
(
"a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
0    => "a3",
1    => "a4",
"a5" => array("a5b", "a5b")
);

Я думаю, вы имели в виду это вместо этого:

$Arr1 = array
(
"a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
"a3" => null,
"a4" => null,
"a5" => array("a5b", "a5b")
);

Тогда вы можете получить к нему доступ через foreach:

foreach ($Arr1 as $key => $value)
echo "$key => " .
( is_array($value)
? implode(', ', $value)
: $value
),
'<br>', PHP_EOL
;

Или если вы делаете не хочу ключи с пустыми значениями:

foreach ($Arr1 as $key => $value)
if(is_array($value))
echo "$key => ", implode(', ', $value), '<br>', PHP_EOL;

или просто

$filered = array_filter( $Arr1, function($v) { return is_array($v); } );

foreach ( $filered as $key => $sub_array)
echo $key, ' => ', implode(', ', $sub_array), '<br>', PHP_EOL;
2

Почему вы не устанавливаете значения «a3» и «a4» в пустой массив («=> array ()»)?
Затем вы можете просмотреть и получить доступ к значениям с помощью клавиш «топор». В цикле вы обрабатываете данные, за исключением того, что массив пуст.

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