多次元配列とforeachループに関する多くの質問があります。時間をかけて読んで、自分のループを成功させようと努力しました。解決策が重複している場合、私は自分の質問を削除します(または、それが望ましい場合は別のものへのリンク)。配列検索付き多次元配列ループ
今、挑戦:
- 返さMYSQL結果の配列を使用します。結果は、連想配列の複数の結合テーブルからのものです。今私は必要な多次元配列に変換する必要があります。
- 私はそのほとんどを動作させていますが、問題はループして新しい項目を配列の適切な場所に追加しています。
ここにいくつかのコードです:
//example of how array is setup in the way I want, this part works.
foreach($results as $i => $a):
//some other code is here, see below.
$items[$i] = [
"id" => $a['id'],
"itemid" => $a['itemid'],
"name" => $a['name'],
"def" => $a['def'],
"class" => $a['class'],
"timeline" => $a['timeline'],
"files" => [
[0] => [
"id" => $a['fileid'],
"name" => $a['filename'],
"path" => $a['filepath'],
"type" => $a['filetype']
]
],
"tags" => [
[0] => [
"id" => $a['tagid'],
"name" => $a['tagname']
]
]
];
endforeach;
それから私だけに順序をループにいくつかの方法を試した項目「idが」の場合、「タグ」または「ファイル」に追加最後と同じ。ここでは、現在のコードは、私のエディタである動作しない:
//inside foreach loop, before above code
if($items[$i-1]['id'] == $a['id']):
//it is the same item, works to here.
if(in_array($a['filename'], $items[$i-1], FALSE)):
//add to files array for last item
$items[$i-1]['files'][] = [
"id" => $a['fileid'],
"name" => $a['filename'],
"path" => $a['filepath'],
"type" => $a['filetype']
];
elseif(in_array($a['tagname'], $items[$i-1], FALSE)):
//add to tags array for last item
$items[$i-1]['tags'][] = [
"id" => $a['tagid'],
"name" => $a['tagname']
];
endif;
else:// else it does the code above
あなたが見ることができるように、私の最も最近の試みは、私は今、多次元配列では動作しません実現した、in_array使用することでした。私の問題は、同じファイルの新しいファイルか新しいタグかどうかを判断する方法を見つけることができないということです。
最終的に、複数の「ファイル」と「タグ」を持つ「アイテム」の配列が必要です。私はjson_encodeに行きJSの後でそれを使うつもりです。
これを取得したり最適化する方法についてアドバイスをいただければ幸いです。
P.S.前にも述べたように、私はこの問題が以前に尋ねられていることは知っていますが、私のソリューションは私のために働くことができませんでした。ソリューションが重複している場合は、この質問を削除します(他の人にはあまり役に立ちません)。何か助けてくれてありがとう、それは非常に感謝しています!
お使いのPHPのバージョンは何ですか? PHP> = 5.5では、 '' array_column'(http://php.net/manual/en/function.array-column.php)を使用することができます: 'in_array($ a ['filename']、array_column($ items [$ i-1] ['files']、 'name')) ' – fusion3k
チップ@fusion3kをありがとう。私はその機能に関するドキュメントを読んで、試してみるつもりです。 – turnfire