PHP混合关联数组如何在foreach循环中获取值
我有点像PHP混合关联数组如何在foreach循环中获取值,php,arrays,associative,Php,Arrays,Associative,我有点像 $Arr1 = array("a1" => array("a1b", "a1b"), "a2" => array("a2b", "a2b"), "a3", "a4", "a5" => array("a5b", "a5b") ); 我需要通过一个foreach循环来获得$key=>$value对和唯一一个没有值的键 应该是检查isset($value)的东西
$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\u 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)
您可以使用函数和键类型检查(例如,使用帮助函数)获取具有数字键的元素
或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”不是键,它们是具有数字键的元素。如果对该数组进行
var\u 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)
您可以使用函数和键类型检查(例如,使用帮助函数)获取具有数字键的元素
或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”键访问这些值。在循环中处理数据,但数组为空。为什么不将“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作为$key=>$value)
回显“$key=>”。
(是数组($value)
?内爆(“,”,$value)
:$value
),
“
”,PHP_EOL
;
或者,如果您不想要具有空值的键,请执行以下操作:
foreach ($Arr1 as $key => $value)
if(is_array($value))
echo "$key => ", implode(', ', $value), '<br>', PHP_EOL;
foreach($Arr1作为$key=>$value)
if(是_数组($value))
echo“$key=>”,内爆(“,”,$value),“
”,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;
$filered=array_filter($Arr1,函数($v){返回的是_数组($v);});
foreach($key=>$sub_数组)
echo$key,'=>',内爆(',',$sub_数组),'
',PHP_EOL;
您的数组看起来很奇怪,因为您混淆了键和值,例如“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作为$key=>$value)
回显“$key=>”。
(是数组($value)
?内爆(“,”,$value)
:$value
),
“
”,PHP_EOL
;
或者,如果您不想要具有空值的键,请执行以下操作:
foreach ($Arr1 as $key => $value)
if(is_array($value))
echo "$key => ", implode(', ', $value), '<br>', PHP_EOL;
foreach($Arr1作为$key=>$value)
if(是_数组($value))
echo“$key=>”,内爆(“,”,$value),“
”,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;
$filered=array_filter($Arr1,函数($v){返回的是_数组($v);});
foreach($key=>$sub_数组)
echo$key,'=>',内爆(',',$sub_数组),'
',PHP_EOL;
ISSET不起作用-它是ISSET另一个注意事项:a3不是一个键,而是一个值,因为它没有标签。您的预期输出是什么?如果您不知道答案或不理解,请不要写任何东西。这里根本不需要你的“WTF”。找到另一个社交媒体。顺便说一句,马克西姆·费多洛夫已经给出了一个正确的答案,如果你感兴趣的话,这个答案是有效的。我不是一个以英语为母语的人,现在我明白了这是一种常见的语言,比如“哦,嘘…”、“哦,该死”,因为它几乎在任何场合都会被说/写,而不是被个人称呼。我的美国朋友不只是每天这样做一次。:)ISSET不起作用-它是ISSET另一个注意事项:a3不是一个键,而是一个值,因为它没有标签。您的预期输出是什么?如果您不知道答案或不理解,请不要写任何东西。这里根本不需要你的“WTF”。找到另一个社交媒体。顺便说一句,马克西姆·费多洛夫已经给出了一个正确的答案,如果你感兴趣的话,这个答案是有效的。我不是一个以英语为母语的人,现在我明白了这是一种常见的语言,比如“哦,嘘…”、“哦,该死”,因为它几乎在任何场合都会被说/写,而不是被个人称呼。我的美国朋友不只是每天这样做一次。:)我明白,但那正是我想要避免的。我明白,但那正是我想要避免的。非常感谢。我对每个($Arr1 as$key=>$value){if(is_numeric($key)){$key=$value;$value=null;}//使用$key}也有同样的看法。非常感谢。我在foreach($Arr1 as$key=>$value){if(is_numeric($key)){$key=$value;$value=null;}//使用$key}得到了相同的结果