如何对对象数组使用爆炸

how to use explode for an array of objects

我有一个这样的数组:

array(5) {
["code"]=>
int(1)
["messageError"]=>
string(27) "La typologie est incorrecte"
["model"]=>
string(3) "lot"
["grp_regles"]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(3) {
["champ"]=>
string(21) "lot_surface_habitable"
["comparaison"]=>
string(7) "between"
["valeurAttendue"]=>
array(2) {
[0]=>
int(16)
[1]=>
int(40)
}
}
}
}
["prerequis"]=>
array(2) {
[0]=>
array(3) {
["champ"]=>
string(6) "typ_id"
["comparaison"]=>
string(1) "="
["valeurAttendue"]=>
int(1)
}
[1]=>
array(3) {
["champ"]=>
string(22) "tranche.fus.fup.fup_id"
["comparaison"]=>
string(1) "="
["valeurAttendue"]=>
int(1)
}
}
}

我想在“先决条件”中做一个foreach:

$modelRetrieve = $this->retrieveModel($model);
        $modelFind = $modelRetrieve::find($id);
        $arrayError=[];
        $query = '';
        $path = storage_path() . "/json/controle.json";
        $json = file_get_contents($path);
        foreach (json_decode($json,true) as $key => $value) {
            $test = true;
            var_dump($value);
            if($value['model'] === $model ){
            foreach ($value['prerequis'] as $key => $value2) {
                if( $test && $modelFind[$value2['champ']] == (int)$value2["valeurAttendue"] ) 
                {
                    $test = true;
                }
            }
            }
        }

我需要在第二个 foreach 中使用 $value2['champ'],其中 $value2['champ'] 是“tranche.fus.fup_id。所以我需要分解它以获得 ['tranche']['fus']['fup_id']。 如何使用 explode 呢? 谢谢大家:)

要嵌套字符串的 $segments 从结果的最里面的项目开始,我们必须 array_reverse() $segments 这样我们就可以遍历它并包装每个在下一次迭代中使用另一个数组级别迭代的结果,直到我们遍历整个 $segments 数组。

$exploded = array_reduce(array_reverse(explode('.', $value2['champ'])), function($res, $segment) {
    return [ $segment => $res ];
}, []);

你可以使用 laravel data_get 助手:

data_get($value2, $value2['champ'])