PHP foreach 与嵌套数组?
Posted
技术标签:
【中文标题】PHP foreach 与嵌套数组?【英文标题】:PHP foreach with Nested Array? 【发布时间】:2011-04-10 17:06:09 【问题描述】:我有一个嵌套数组,我想在其中显示结果的子集。例如,在下面的数组中,我想遍历嵌套数组[1] 中的所有值。
大批 ( [0] => 数组 ( [0] => 一 [1] => 数组 ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => 数组 ( [0] => 两个 [1] => 数组 ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => 数组 ( [0] => 三 [1] => 数组 ( [0] => 7 [1] => 8 [2] => 9 ) ) )我试图使用 foreach 函数,但我似乎无法让它工作。这是我原来的语法(虽然我意识到这是错误的)。
$tmpArray = array(array("one",array(1,2,3)),array("two",array(4,5,6)),array("three",array(7,8,9 ))); foreach ($tmpArray[1] as $value) 回声$值;我试图避免变量比较键是否与我要搜索的键相同,即
foreach ($tmpArray as $key => $value) 如果 ($key == 1) 回声$值;有什么想法吗?
【问题讨论】:
您的初始语法似乎没问题,但$value
可以是foreach
中的数组本身。在这种情况下,您不能只是回显它,还需要循环遍历它。
【参考方案1】:
如果您知道嵌套数组中的层数,则可以简单地进行嵌套循环。像这样:
// Scan through outer loop
foreach ($tmpArray as $innerArray)
// Check type
if (is_array($innerArray))
// Scan through inner loop
foreach ($innerArray as $value)
echo $value;
else
// one, two, three
echo $innerArray;
如果你不知道你需要使用递归的数组的深度。请参见下面的示例:
// Multi-dementional Source Array
$tmpArray = array(
array("one", array(1, 2, 3)),
array("two", array(4, 5, 6)),
array("three", array(
7,
8,
array("four", 9, 10)
))
);
// Output array
displayArrayRecursively($tmpArray);
/**
* Recursive function to display members of array with indentation
*
* @param array $arr Array to process
* @param string $indent indentation string
*/
function displayArrayRecursively($arr, $indent='')
if ($arr)
foreach ($arr as $value)
if (is_array($value))
//
displayArrayRecursively($value, $indent . '--');
else
// Output
echo "$indent $value \n";
下面的代码仅显示嵌套数组,其中包含特定情况的值(仅限第 3 级)
$tmpArray = array(
array("one", array(1, 2, 3)),
array("two", array(4, 5, 6)),
array("three", array(7, 8, 9))
);
// Scan through outer loop
foreach ($tmpArray as $inner)
// Check type
if (is_array($inner))
// Scan through inner loop
foreach ($inner[1] as $value)
echo "$value \n";
【讨论】:
我想你可能错过了我的意思,我只想显示一个特定的嵌套/子数组,而不是全部。 @noangel 误会见谅,请看水平尺后修改后的帖子(最后一部分)。这应该澄清一些事情。 我尝试了你的递归数组输出实现,虽然它适用于第一级,但我最后一个嵌套数组只是在一行上输出【参考方案2】:foreach ($tmpArray as $innerArray)
// Check type
if (is_array($innerArray))
// Scan through inner loop
foreach ($innerArray as $value)
echo $value;
else
// one, two, three
echo $innerArray;
【讨论】:
【参考方案3】:两种语法都是正确的。但结果将是Array
。你可能想做这样的事情:
foreach ($tmpArray[1] as $value)
echo $value[0];
foreach($value[1] as $val)
echo $val;
这将打印出字符串 "two" ($value[0]) 和数组 ($value[1]) 中的整数 4、5 和 6。
【讨论】:
我只收到错误:警告:为 foreach() 提供的参数无效【参考方案4】:据我了解,之前的所有答案都不会产生数组输出, 就我而言: 我有一个具有父子结构的模型(此处为简化代码):
public function parent()
return $this->belongsTo('App\Models\Accounting\accounting_coding', 'parent_id');
public function children()
return $this->hasMany('App\Models\Accounting\accounting_coding', 'parent_id');
如果您想将所有子 ID 作为一个数组,这种方法很好并且对我有用:
public function allChildren()
$allChildren = [];
if ($this->has_branch)
foreach ($this->children as $child)
$subChildren = $child->allChildren();
if (count($subChildren) == 1)
$allChildren [] = $subChildren[0];
else if (count($subChildren) > 1)
$allChildren += $subChildren;
$allChildren [] = $this->id;//adds self Id to children Id list
return $allChildren;
allChildren() 将所有的孩子作为一个简单的数组返回。
【讨论】:
以上是关于PHP foreach 与嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章