-
1:ID:11aEEd · 2017-08-09

#質問 PHPの配列について質問です。
多次元配列に深く格納していくにはどうしたらいいでしょうか?
理想の結果は以下のように、子を取得していき、子がなくなるまで深く格納していきたいです。
while文でやろうと思いましたが、子が複数の場合もあるのでどうすればいいか分からなくなりました。
//子を取得するユーザー定義関数
// 結果: array(1, 2, 6)
$array = get_child($id);
/*==========何らかのループ============*/
$result = array(
---[0] => array(
--------------'id' => 1
--------------'child' => array(
----------------------------[0] => array(
---------------------------------------'id' => 5
---------------------------------------'child' => false
----------------------------),
----------------------------[1] => array(
---------------------------------------'id' => 7
---------------------------------------'child' => array(...)
----------------------------)
---),
---[1] => array(
--------------'id' => 2
--------------'child' => array(...
---),
---[2] => array(
--------------'id' => 6
--------------'child' => false
)

3 件の回答

2:ID:uMmn8n · 2017-08-09

$result = [];
$result[] = 'hoge';
みたいな感じで要素を追加していくのはいかがでしょうか?

また、一発で配列を作るのではなく、
$array1 = ['aaa','bbb'];
$array2 = ['ccc','ddd'];

$result = [ array1, array2 ];
とか
$result[] = array1;
$result[] = array2;
みたいにすれば、読みやすいコードになる気がします。

3:ID:oD76pA · 2017-08-09

再帰関数を作れ。知らなきゃアルゴリズムの教科書見れ。

4:ID: · 2017-08-09

Re:3
再帰関数!
独学だったもので知りませんでした。
以下のやり方でできました!
ありがとうございます!
$id = 5;
$ids = get_child($id);
$result = get_all_ids($ids);
function get_all_ids($ids){
------$result = array();
------foreach($ids as $id){
------------$child_ids = get_child($id);
------------if($child_ids){
------------------$child_ids = get_all_ids($child_ids);
------------} else {
------------------$child_ids = false;
------------}
------------$result[] = array(
------------------'id' => $id,
------------------'child' => $child_ids
------------);
------}
------return $result;
}

コメントの受付は終了しました。

一緒に読まれている質問

ページ上部に戻る