Php 多维数组循环以获取值
我有一个由多个不同级别的数组组成的数组。我试图做的是按键循环数组,它将遍历每个级别,获取这些键的值。myArray看起来像这样Php 多维数组循环以获取值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个由多个不同级别的数组组成的数组。我试图做的是按键循环数组,它将遍历每个级别,获取这些键的值。myArray看起来像这样 Array ( [0] => Array ( [Date] => 2011-15-22 [Color] => blue [Status] => Fresh [1] => Array ( [Date] => 1999-08-04 [Color]
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
及
警告:为foreach()提供的参数无效
因为$row[“Date”]
是字符串
-foreach仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,它将发出错误
注意:未定义索引:日期
可能您的数组中某个地方没有键为Date
的元素(随着迭代的进行,您的数组结构可能会有所不同),因此您会收到此消息,请使用to或来验证,具体取决于目的
请注意isset!=数组\u键\u存在
$a = array('key1' => 'test1', 'key2' => null);
isset($a['key2']); // false
array_key_exists('key2', $a); // true
还有一个重要的区别<当$a
不存在时,code>isset不会抱怨,而array\u key\u存在时
会抱怨
警告:为foreach()提供的参数无效
因为$row[“Date”]
是字符串
-foreach仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,它将发出错误
注意:未定义索引:日期
可能您的数组中某个地方没有键为Date
的元素(随着迭代的进行,您的数组结构可能会有所不同),因此您会收到此消息,请使用to或来验证,具体取决于目的
请注意isset!=数组\u键\u存在
$a = array('key1' => 'test1', 'key2' => null);
isset($a['key2']); // false
array_key_exists('key2', $a); // true
还有一个重要的区别<当
$a
不存在时,isset
不会抱怨,而array\u key\u存在时,会抱怨。正如axiac在注释中所述,$row[“Date”]
是一个字符串,因此不可编辑。你可能只是想要这个:
foreach($myArray as $row){
foreach($row as $k){
echo $k
}
}
通知未定义索引:Date
还描述了出现的问题-您访问索引时没有检查它是否存在。看起来您的数据结构并不总是相同的。在这种情况下,应始终使用函数检查是否存在:
if (isset($row["Date"])) {
//do something here
}
$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;
});
正如axiac在注释中所述,$row[“Date”]
是一个字符串,因此不可编辑。你可能只是想要这个:
foreach($myArray as $row){
foreach($row as $k){
echo $k
}
}
通知未定义索引:Date
还描述了出现的问题-您访问索引时没有检查它是否存在。看起来您的数据结构并不总是相同的。在这种情况下,应始终使用函数检查是否存在:
if (isset($row["Date"])) {
//do something here
}
$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;
});
看起来你只需要这个:
foreach($myArray as $row){
echo $row["Date"];
}
或
或
看起来你只需要这个:
foreach($myArray as $row){
echo $row["Date"];
}
或
或
只需使用array\u walk\u recursive
函数:
if (isset($row["Date"])) {
//do something here
}
$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
只需使用array\u walk\u recursive
函数:
if (isset($row["Date"])) {
//do something here
}
$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
在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>';
}
}
}
foreach($myArray作为$key=>$value){
echo$key.'is'.gettype($value)。“
”;
if(是_数组($value)){
foreach($subKey=>$subValue形式的值){
回显$subkey.'=>'.$subValue.'
';
}
}
}
通过这种方式,您可以在不丢失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>';
}
}
}
foreach($myArray作为$key=>$value){
echo$key.'is'.gettype($value)。“
”;
if(是_数组($value)){
foreach($subKey=>$subValue形式的值){
回显$subkey.'=>'.$subValue.'
';
}
}
}
这样,您就可以在不丢失结构的情况下访问和打印所有值您是否只收到这些错误?您确定所有元素的数组结构都完全相同吗(假设您有两个以上的项目)$row[“Date”]
是一个字符串,foreach
不会无缘无故地抱怨。只需执行echo$row[“Date”]
-如果只需要日期,则无需嵌套foreach。@Calimero Yes结构对于所有阵列都是相同的可能重复的。。。当然,如果您愿意,您可以省略删除重复项的最后一步。您是否只收到这些错误?您确定所有元素的数组结构都完全相同吗(假设您有两个以上的项目)$row[“Date”]
是一个字符串,foreach
不会无缘无故地抱怨。只需执行echo$row[“Date”]
-如果只需要日期,则无需嵌套foreach。@Calimero Yes结构对于所有阵列都是相同的可能重复的。。。当然,如果您愿意,您可以省略删除重复项的最后一步。我如何使用isset on date。日期以字符串形式返回。isset
只做一件事:它告诉您变量是否为null
(默认情况下每个变量都为空)。在那里传递什么并不重要。在添加if-isset语句后打印foreach的结果不会返回任何结果。但是如果我动态返回myArray[0][“Date”],它将返回content我如何使用isset on Date。日期以字符串形式返回。isset
只做一件事:它告诉您变量是否为null
(默认情况下每个变量都为空)。在那里传递什么并不重要。在添加if-isset语句后打印foreach的结果不会返回任何结果。但是,如果我动态返回myArray[0][“Date”],它将返回contentI。我去掉了第二个foreach,但得到了未定义的索引错误。Date是一个字符串如何修复此错误在添加if isset语句后打印foreach的结果不返回任何内容。但如果我动态返回myArray[0][“Date”],它将返回contentisset或array_key_exists(如果需要)用于验证,如果您的数组与上面的相同,则返回此foreach($myArray as$row){e