Php阵列。环。如果条件为真,则设置变量。再循环。需要重复一遍。但不重复相同的代码

时间:2015-07-03 19:08:29

标签: php arrays

以下是较长的示例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]是否等于定义的变量...就像问题顶部的链接一样

1 个答案:

答案 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);