以下是较长的示例https://eval.in/392036
循环数组。
如果数组值==到某个(第一个)变量[0],则设置下一个变量[1]。
再次循环遍历同一个数组(循环内部循环)。
再次检查数组值==下一个变量[1] ....并再次执行相同操作。
因此,手动复制/粘贴相同的代码,只需更改变量[x]。
有这样的阵列
(
[0] => Array
(
[Id] => 17
[Value] => ProductsParentId_0_CurrentId_17
[ParentId] => 0
)
[1] => Array
(
[Id] => 1
[Value] => HomeParentId_0_CurrentId_1
[ParentId] => 0
)
[2] => Array
(
[Id] => 18
[Value] => ComputersParentId_17_CurrentId_18
[ParentId] => 17
)
.....
)
循环播放
foreach ( $arr as $k_arr => $v_arr ){
if( $v_arr['ParentId'] == 0 ){
echo $v_arr['Value']. "\n";
$parent_id_for_current[1] = $v_arr['Id'];
foreach ( $arr as $k_arr => $v_arr ){
if( $v_arr['ParentId'] == $parent_id_for_current[1] ){
echo $v_arr['Value']. "\n";
$parent_id_for_current[2] = $v_arr['Id'];
foreach ( $arr as $k_arr => $v_arr ){
if( $v_arr['ParentId'] == $parent_id_for_current[2] ){
echo $v_arr['Value']. "\n";
$parent_id_for_current[3] = $v_arr['Id'];
.....
}//if( $v_arr['ParentId'] == $parent_id_for_current[2] )
}//foreach
}//if( $v_arr['ParentId'] == $parent_id_for_current[1] )
}//foreach
}//if( $v_arr['ParentId'] == $parent_id_for_current[0] )
}//foreach ( $arr as $k_arr => $v_arr )
是否可以获得相同的结果,而不是重复(复制/粘贴)foreach, if
预期结果是:
1)显示['Value']
其中[ParentId] => 0
1.1)定义值为[Id] => 17
2)再次循环,找到并显示['Value']
其中[ParentId]
==在1.1中定义的变量。
并重复所有。再次定义另一个变量,然后再循环,检查一些[ParentId]
是否等于定义的变量...就像问题顶部的链接一样
答案 0 :(得分:1)
看起来你有一个递归模式:
function loopMyArray(&$array, &$parent, $i)
{
// That's your stop condition of the recursive pattern
// I think it's what you want.
if (count($array) == $i)
{
return;
}
// The foreach loop call the "loopMyArray" at each iteration
foreach ($array as $k_arr => $v_arr)
{
if( $v_arr['ParentId'] == $parent[$i])
{
echo $v_arr['Value']. "\n";
$parent[$i+1] = $v_arr['Id'];
loopMyArray($array, $parent, $i+1);
}
}
}
$array = [...]
$parent = [0]
loopMyArray($array, $parent, 0);