アプリケーションでメニューの構造をソートするのに忙しくしています。ユーザーがメニューを並べ替えても、値 (たとえば、メニュー項目 1、メニュー項目 2 など) は同じ場所にあります。
1 つは並べ替え方法 (配列 1) を保持し、もう 1 つはメニュー項目の値を保持します。(配列 2)
両方の配列の例。(キーを保持する配列 1)
Array
(
[0] => 1
[1] => 2
[2] => 0
)
上記の配列の値は、新しい配列のキーです。
(配列 2、値を保持)
Array
(
[0] => value_0
[1] => value_1
[2] => value_2
)
したがって、次のもので構成される新しい配列を作成するのが最善だと思いました。
- 配列 1 の値
- 配列 2 の値
しかし、私は問題に直面しています。配列 2 の値をキーに固定したい。value_0 の位置を最後に変更すると、新しい配列は次のようになります。
Array
(
[1] => value_1
[2] => value_2
[0] => value_0
)
これを達成する方法はありますか、それとも完全に間違っていますか?
編集
わかりました、多次元配列です。ただし、作成に問題があります。
配列 1 と配列 2 は両方ともデータベースから取得されます。配列 1 には並べ替え順序が含まれ、配列 2 には値が含まれます。これで、配列 2 の値は次のように格納されます。値 1、値 2、値 3。だから、それらと一緒に作業できるようにするために、私は , (コンマ) を爆発させます。
フェッチの結果は両方とも異なります。
- 最初の配列では、値の数と同じ数を返します。(したがって、3 つの値がある場合、3 つの異なる位置が返されます。)
- 2 番目の配列では、18 レコードが返されます。これは、他のメニュー項目 (サブメニューなど) に関連付けられているためです。
したがって、最初の配列については、次のようにします。
while ($row = mysql_fetch_assoc($result_query_test)) {
$positions[] = $row['position'];
}
2番目の配列については、私が行います。
while ($row = mysql_fetch_assoc($result_values)) {
$array_values = explode(',', $row['values']);
}
それ以来、多次元配列の作成に問題があります。
while ($row = mysql_fetch_assoc($result_values)) {
$array_values = explode(',', $row['values']);
foreach ($positions as $new_key) {
foreach ($array_values as $value) {
$new_array[] = array('key' => $new_key, 'value' => $value);
}
}
}
2 つを編集します。
これは私が今使っているものです。
( $all_values は多次元配列であるため、事前に値を爆発させる必要があります。)
foreach ($all_values as $values) {
foreach ($values as $key => $value) {
$new_array[] = array('key' => $positions[$key], 'value' => $value);
}
}
これは $new_array が返すものです。
Array
(
[0] => Array
(
[key] => 0
[value] => value_0
)
[1] => Array
(
[key] => 2
[value] => value_2
)
[2] => Array
(
[key] => 1
[value] => value_1
)
[3] => Array
(
[key] => 0
[value] => value_0
)
[4] => Array
(
[key] => 2
[value] => value_2
)
[5] => Array
(
[key] => 1
[value] => value_1
)
ここで、値を取得してコンマで内破する必要があります。ただし、3 つの値 (value_0、value_1、value_3) がすべて一緒であるとは限らないため、今はできません。
この例では、3 つのキー (0,1,2) があり、例で行ったように、値とともに異なる配列にする必要があります。
Array (
[0] = Array (
[key] = 1,
[value] = value_1
),
[1] = Array (
[key] = 2,
[value] = value_2
),
[2] = Array (
[key] = 0,
[value] = value_0
)
)