PHP 混合关联数组如何在foreach循环中取值
PHP mixed associative array how to get values in foreach loop
嗯,我有类似的东西
$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
function and checking of key type (for example with help 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;
}
}
为什么不将 "a3" 和 "a4" 的值设置为空数组 ("=> array()")?
然后您可以循环并使用 "ax" 键访问值。在循环中处理数据,但数组为空。
您的数组看起来很奇怪,因为您混淆了键和值,例如 "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;
嗯,我有类似的东西
$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
function and checking of key type (for example with help 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;
}
}
为什么不将 "a3" 和 "a4" 的值设置为空数组 ("=> array()")? 然后您可以循环并使用 "ax" 键访问值。在循环中处理数据,但数组为空。
您的数组看起来很奇怪,因为您混淆了键和值,例如 "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;