Ну у меня что то типа
$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
}
Каждый элемент массива имеет свой ключ. «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;
}
}
Ваш массив выглядит странно, так как вы смешиваете ключи и значения типа «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;
Почему вы не устанавливаете значения «a3» и «a4» в пустой массив («=> array ()»)?
Затем вы можете просмотреть и получить доступ к значениям с помощью клавиш «топор». В цикле вы обрабатываете данные, за исключением того, что массив пуст.