多次元配列の再帰関数?

私は再帰関数を使用して、特定の値を見つけるために、以下のような多次元配列を検索しようとしています。つまり、特定の学校に行き、特定の科目を専攻し、この配列はFacebook Graph APIから出力されます。実際には、3つ以上のオフセット配列があり、ユーザの友人の数に応じて、数千になる可能性があります。

ここで私は再帰関数の知識はほとんど試してみました(私の最初の考えはmd配列ではうまくいかなかったことがわかる前にin_arrayを使うことでした):

ですから、以下のmd配列がどのように動作するかを知るために、このコードスニペットをご覧ください:

$friend = $fqlResult[0]['name'];
echo "$friend";

*私は人の名前を削除したので、出力は "BLANK"になります。

$data = $fqlResult;
$collegemajor = (isset($value['education'][0]['concentration'][0]['name'])) ? $value['education'][0]['concentration'][0]['name'] : null ;
$major = "Business Administration";
if (isset($collegemajor)) {
    foreach($data as $key=> $value) {
          if ($value($collegemajor) == $major) {
              echo "User $key is majoring in $major";
     }
  }
}

したがって、上で参照されている多次元配列があります。この例では、Business Adminを専攻したすべてのユーザーの友人の名前を取得したいと考えています。大学で。このスニペットからわかるように、私は(私が思う)何もありませんが、配列の長いバージョンでは、たくさんあります。上記のコードは出力を生成せず、それを動作させる方法については迷っています。どんな助けでも大歓迎です。

 Array
(
[0] => Array
    (
        [name] => BLANK
        [education] => 
        [work] => 
    )

[1] => Array
    (
        [name] => BLANK
        [education] => Array
            (
                [0] => Array
                    (
                        [school] => Array
                            (
                                [id] => 108087985890571
                                [name] => St. Andrew's School
                            )

                        [year] => Array
                            (
                                [id] => 138383069535219
                                [name] => 2005
                            )

                        [type] => High School
                    )

                [1] => Array
                    (
                        [school] => Array
                            (
                                [id] => 20697868961
                                [name] => Boston University
                            )

                        [concentration] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 108654845832522
                                        [name] => Business Administration
                                    )

                            )

                        [type] => College
                    )

                [2] => Array
                    (
                        [school] => Array
                            (
                                [id] => 108289315859633
                                [name] => University of Miami
                            )

                        [year] => Array
                            (
                                [id] => 138879996141011
                                [name] => 2013
                            )

                        [type] => Graduate School
                    )

            )

        [work] => Array
            (
            )

    )

[2] => Array
    (
        [name] => BLANK
        [education] => Array
            (
                [0] => Array
                    (
                        [school] => Array
                            (
                                [id] => 115444241803885
                                [name] => Saint Andrews High School
                            )

                        [year] => Array
                            (
                                [id] => 137616982934053
                                [name] => 2006
                            )

                        [type] => High School
                    )

                [1] => Array
                    (
                        [school] => Array
                            (
                                [id] => 112033702149888
                                [name] => Boca Raton High
                            )

                        [year] => Array
                            (
                                [id] => 137616982934053
                                [name] => 2006
                            )

                        [type] => High School
                    )

                [2] => Array
                    (
                        [school] => Array
                            (
                                [id] => 108087985890571
                                [name] => St. Andrew's School
                            )

                        [type] => High School
                    )

                [3] => Array
                    (
                        [school] => Array
                            (
                                [id] => 107573562605861
                                [name] => Duke University
                            )

                        [concentration] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 104045469631213
                                        [name] => Political science
                                    )

                            )

                        [type] => College
                    )

            )

        [work] => 
    )

[4] => Array
    (
        [uid] => 1234567
        [name] => BOB NO ONE
        [education] => Array
            (
                [0] => Array
                    (
                        [school] => Array
                            (
                                [id] => 106039752760627
                                [name] => Berwick Academy
                            )

                        [year] => Array
                            (
                                [id] => 137616982934053
                                [name] => 2006
                            )

                        [type] => High School
                    )

                [1] => Array
                    (
                        [school] => Array
                            (
                                [id] => 108087985890571
                                [name] => St. Andrew's School
                            )

                        [type] => High School
                    )

                [2] => Array
                    (
                        [school] => Array
                            (
                                [id] => 105690226130720
                                [name] => Northeastern University
                            )

                        [concentration] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 108654845832522
                                        [name] => Business Administration
                                    )

                            )

                        [type] => College
                        [classes] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 189873264368867
                                        [name] => 2011
                                    )

                            )

                    )

            )
0
広範な再帰的な検索、または特定の検索をしたいですか? [例えば。奇妙なことに、誰かの学校が Bus Bus.Adminという名前を付けられた場合、あなたの検索で唾を吐くようにしたいですか?]
追加された 著者 Shad,
上記のように、学校や専攻にはIDが割り当てられているので、実際にはIDを使用して検索します。
追加された 著者 Matthieu McLaren,

2 答え

ツリーの深さは常に固定されており、構造が分かっていることを考えると、このような再帰の必要はありません。ネストされたループを使用すると、

$friends = $fqlResult;
$friends_BA = array();

foreach ($friends as $friend) {
    if (is_array($friend['education'])) {
        foreach ($friend['education'] as $school) {
            if (isset($school['concentration'])) {
                foreach ($school['concentration'] as $concentration) {
                    if (strpos(strtolower($concentration['name']), 'business') !== false) {
                        $friends_BA[] = $friend;
                        continue 3;//skip to the next friend
                    }
                }
            }
        }
    }
}

var_dump($friends_BA);
0
追加された
答えを更新しました!そして、実際には!== false でなければなりません...私の頭は昨晩のAS3/JSでした。
追加された 著者 brianreavis,
いくつかのケースでは、 [education] null であることに気付かなかった。私はちょうど答えを更新しました...そのバージョンを試してください。
追加された 著者 brianreavis,
(そして、 name の代わりに id フィールドを検索するように更新しました)
追加された 著者 brianreavis,
is_array isset に変更すると、通知が取り除かれます。
追加された 著者 brianreavis,
追加された 著者 brianreavis,
返される返されないエントリを表示できますか?
追加された 著者 brianreavis,
確かに。それ、または pastie.org
追加された 著者 brianreavis,
どうもありがとう!私は終わったと思った。
追加された 著者 Matthieu McLaren,
strpos(strtolower($ name [])、 'business')をどこに置くのですか?= -1
追加された 著者 Matthieu McLaren,
join.meにコード895-165-764を入力してください
追加された 著者 Matthieu McLaren,
join.meセッションにあなたを招待して、私の画面を表示できますか?
追加された 著者 Matthieu McLaren,
うん、それをやることなく私たちが行ったことの通知。
追加された 著者 Matthieu McLaren,
何らかの理由で3人のユーザーしか戻っていませんが、21人がいます。
追加された 著者 Matthieu McLaren,
私たちは近くにいる。 3人のユーザーがビジネス管理者になりました。私は残りの部分が上に表示されていないと仮定しています。上記の配列の大部分を貼り付けて、それが問題だと思ったら教えてください。私はまた百万を得ています:注意:未定義のインデックス:106,106行のC:\ xampp \ htdocs \ pathweavr \ friendtest.phpの濃度if(is_array($ school ['concentration'])){
追加された 著者 Matthieu McLaren,
私が数週間苦労しているこの問題のコードを解読すれば、私は真剣にあなたの人生に借りなければなりません。
追加された 著者 Matthieu McLaren,
警告:C:\ xampp \ htdocs \ pathweavr \ friendtest.phpの93行目のforeach()で無効な引数が指定されています。
追加された 著者 Matthieu McLaren,

配列の特定のフィールドで特定の値を見つける関数が必要な場合は、

function arraySearch($key, $value, $array){
  $flag = FALSE;
  foreach($array as $result){
    if(arraySearch($key, $value, $result)){
      $flag = TRUE
    }elseif(isset($result[$key] && $result[$key] == $value){
      $flag = TRUE;
    }
  }
  return $flag
}

$ flagをtrueに設定するのではなく、パフォーマンスを向上させるために、関数の実行を停止し、配列の検索を続行しないようにすることができます。

それをそう呼んでください

foreach($fqlResult as $result){
  if(arraySearch('concentration', 'Business Administration', $result)){
    //You have found a user you are looking for, echo $result['name'] or do what you want with the result. 
  }
}
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com