0

アプリケーションでメニューの構造をソートするのに忙しくしています。ユーザーがメニューを並べ替えても、値 (たとえば、メニュー項目 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. 配列 1 の値
  2. 配列 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
  )
)
4

2 に答える 2

3

多次元配列を作ってみませんか?

$arrayThree = 
Array (
  [0] = Array (
    [key] = 1,
    [value] = value_1
  ),
  [1] = Array (
    [key] = 2,
    [value] = value_2
  ),
  [2] = Array (
    [key] = 0,
    [value] = value_0
  )
)

順序に関係なく、キーと値は常に設定されています。

foreach ($arrayThree as $tempArray)
{
 echo $tempArray['key'];
 echo $tempArray['value'];
}

アレイの作成

$arrayOne = array();
$arrayTwo = array();
$arrayThree = array();

$query = 'SELECT key FROM table1 ';
$result = mysql_query($query) or die(mysql_error());

while($data = mysql_fetch_assoc($result))
{
  $arrayOne[] = $data['key'];
}

$query = 'SELECT value FROM table2 ';
$result = mysql_query($query) or die(mysql_error());

while($data = mysql_fetch_assoc($result))
{
  $arrayTwo[] = $data['value'];
}

foreach($arrayOne as $key => $value)
{
  $arrayThree[] = array('key' => $value, 'value' => $arrayTwo[$key]);
}

mysqliまたはPDOバージョンを使用している場合は、それらをいつでも使用できます。

サンプルデータ

    //THESE MIMIC YOUR SELECT RESULTS
$test_keys = array(1,2,3);
$test_values = array('value_1', 'value_2', 'value_3');

    //DEFAULTS
$arrayOne = array();
$arrayTwo = array();
$arrayThree = array();

    //WHILE FIRST SELECT
for($i=0;$i<count($test_keys);$i++)
{
    $arrayOne[] = $test_keys[$i];
}

    //WHILE SECOND SELECT
for($i=0;$i<count($test_values);$i++)
{
    $arrayTwo[] = $test_values[$i];
}

    //MAKE THE FINAL ARRAY
foreach($arrayOne as $key => $value)
{
  $arrayThree[] = array('key' => $value, 'value' => $arrayTwo[$key]);
}

    //CHECK THE OUTPUT FOR THE NEW ARRAY
echo '<pre>'.print_r($arrayThree,true).'</pre>';

出力例

Array
(
    [0] => Array
        (
            [key] => 1
            [value] => value_1
        )

    [1] => Array
        (
            [key] => 2
            [value] => value_2
        )

    [2] => Array
        (
            [key] => 3
            [value] => value_3
        )

)

内包リスト

$implodeValues = array_map(function($item) { return $item['value']; }, $arrayThree);
$implodeVariable = implode(',', $implodeValues);

echo $implodeVariable;

Implode出力

value_1,value_2,value_3

于 2012-07-26T14:45:27.110 に答える
0

私はあなたがこれをしたいものを手に入れることができると思います:

$new = array();
for($i = 0, $len = count($array1), $i < $len, ++$i) {
    $new[$array1[$i]] = $array2[$i];
}

これ$newで、必要な順序で値が含まれます

于 2012-07-26T14:41:49.143 に答える