好吧,我有类似的东西
$Arr1 = array("a1" => array("a1b", "a1b"),
"a2" => array("a2b", "a2b"),
"a3",
"a4",
"a5" => array("a5b", "a5b")
);
这意味着"A3"和"A4"是没有值的键。
我需要通过一个 foreach 循环来获得$key => $value
对。
应该是检查isset($value)
的东西,但它不起作用。
更新:问题已结束。谢谢大家。因为它被写入 没有值的键不是键,而是带有默认整数键的值。因此,如果有人想使用上面的结构,请制作这个
foreach ($Arr1 as $key => $value) {
if (is_int($key)) {
$key = $value;
$value = null;
}
//use $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()")?然后,您可以循环访问并使用"ax"键访问值。在循环中处理数据,但数组为空。