我有一个包含不同级别的多个数组的数组。我试图做的是通过键循环数组,它将通过每个级别获取这些键的值。 myArray看起来像这样
Array ( [0] =>
Array ( [Date] => 2011-15-22
[Color] => blue
[Status] => Fresh
[1] =>
Array ( [Date] => 1999-08-04
[Color] => green
[Status] => Rotten) )
我试过了
foreach($myArray as $row){
foreach($row["Date"] as $k){
echo $k
}
}
我正在
Notice: Undefined index: Date
和
Warning: Invalid argument supplied for foreach()
答案 0 :(得分:2)
只需使用array_walk_recursive
功能:
$arr = [
[ 'Date' => '2011-15-22', 'Color' => 'blue', 'Status' => 'Fresh' ],
[ 'Date' => '1999-08-04', 'Color' => 'green', 'Status' => 'Rotten' ]
];
array_walk_recursive($arr, function($v, $k){
if ($k == 'Date') echo $v . PHP_EOL;
});
输出:
2011-15-22
1999-08-04
答案 1 :(得分:1)
在你的foreach上,你应该指定键和值,这样你就可以访问:
foreach ($myArray as $key => $value){
echo $key.' is '. gettype ($value).'<br>';
if (is_array($value)){
foreach ($value as $subKey => $subValue){
echo $subkey . ' => ' . $subValue . '<br>';
}
}
}
这样您就可以访问并打印所有值而不会丢失结构
答案 2 :(得分:0)
警告:为foreach()提供的参数无效
因为$row["Date"]
是字符串
foreach()
- foreach仅适用于数组和对象,当您尝试在具有不同数据类型或未初始化变量的变量上使用它时会发出错误。
注意:未定义的索引:日期
可能你的数组可能没有某个键Date
的元素(你的数组结构可能不同,因为迭代发生),所以你收到这条消息,使用isset()
或{{3}根据目的进行验证。
请注意isset != array_key_exists
$a = array('key1' => 'test1', 'key2' => null);
isset($a['key2']); // false
array_key_exists('key2', $a); // true
还有另一个重要的区别。当isset
不存在时,$a
不会抱怨array_key_exists
。
答案 3 :(得分:0)
作为注释中的axiac状态,this.props.history.push()
是一个字符串,因此不可迭代。你可能只是想要这个:
$row["Date"]
通知foreach($myArray as $row){
foreach($row as $k){
echo $k
}
}
还描述了出错的原因 - 您正在访问索引而不检查它是否存在。看起来你的数据结构并不总是一样的。在这种情况下,您应该始终使用isset函数检查是否存在:
Undefined index: Date
答案 4 :(得分:0)
看起来你只需要这个:
foreach($myArray as $row){
echo $row["Date"];
}
或
foreach($myArray as $row){
$k= $row["Date"];
//do stuff...
}
或
foreach($myArray as $row){
$k[]= $row["Date"];
}
// do stuff with $k[] array.