特定のパターンを持つ配列内のキーのパスを見つけたい場合、次のコードは赤富士のキーを見つけて、その親パス配列(2, 3, 5, 9) を含む配列を返す必要があります。
専門家の方、助けてください ありがとうございます。 一日中調べましたが、わかりませんでした。
$array = array( 1=>array( "name"=>"粮油" ), 2=>array( "name"=>"果蔬", "chlids"=>array( 3=>array( "name"=>"水果", "chlids"=>array( 5=>array( "name"=>"苹果", "childs"=>array( 8=>array( "name"=>"青苹果", ), 9=>array( "name"=>"红富士", ) ) ), 6=>array( "name"=>"橘子" ), 7=>array( "name"=>"大鸭梨" ) ) ), 4=>array( "name"=>"蔬菜", "chlids"=>array( 3=>array( "name"=>"白菜" ), 3=>array( "name"=>"芹菜" ) ) ), ) ) );
$r = find($array, '红富士');print_r($r);function find($ar, $name='') { $res = array(); foreach($ar as $k=>$v) { if($v['name'] == $name) $res[] = $k; elseif(isset($v['childs']) && ! $res) { $res = find($v['childs'], $name); if($res) array_unshift($res, $k); } } return $res;}
(
[0] = > 2
[1] => 3
[2] = > 5
[3] => 9
)
また、注意してください: chlid として書かれています。
$r = find($array, '红富士');print_r($r);function find($ar, $name='') { $res = array(); foreach($ar as $k=>$v) { if($v['name'] == $name) $res[] = $k; elseif(isset($v['childs']) && ! $res) { $res = find($v['childs'], $name); if($res) array_unshift($res, $k); } } return $res;}
(
[0] => 2
[1] = > 3
[2] => 5
[3] => 9
)
また、お子様のキーの一部にも注意してください。名前が間違って書かれていて、chlid と書かれていました
まだそこにいますか?私の質問は少し間違っています。赤富士のキーである 9 を見つけて、この結果を返すというものです。この結果は正しいです。