0

私は配列を持っています:

$initialarray = array(
  0 = array(
    'unit' => 1,
    'class' => 1,
    'value' => 'string1'
  ),
  1 = array(
    'unit' => 1,
    'class' => 2,
    'value' => 'string2'
  ),
  2 = array(
    'unit' => 1,
    'class' => 2,
    'value' => 'string3'
  ),
  3 = array(
    'unit' => 2,
    'class' => 1,
    'value' => 'string4'
  )
  4 = array(
    'unit' => 2,
    'class' => 2,
    'value' => 'string5'
  )
);

最初に「ユニット」フィールドの値に応じて、次に「クラス」フィールドの値に応じて、(結果のサブ配列をグループ化する) それを構造化する最良の方法は次のようになります。

$resultarray = array(
  // array of all the sub-arrays of 'unit' = 1
  $unit[1] = array(
    // array of all the sub-arrays of 'unit' = 1 and 'class' = 1
    $class[1] = array(
      0 = array(
        'unit' => 1,
        'class' => 1,
        'value' => 'string1'
      )
    )
    // array of all the sub-arrays of 'unit' = 1 and 'class' = 2
    $class[2] = array(
      0 = array(
        'unit' => 1,
        'class' => 2,
        'value' => 'string2'
      ),
      1 = array(
        'unit' => 1,
        'class' => 2,
        'value' => 'string3'
      )
    )
  )
  // array of all the sub-arrays of 'unit' = 2
  $unit[2] = array(
    // array of all the sub-arrays of 'unit' = 2 and 'class' = 1
    $class[1] = array(
      0 = array(
        'unit' => 2,
        'class' => 1,
        'value' => 'string4'
      )
    )
    // array of all the sub-arrays of 'unit' = 2 and 'class' = 2
    $class[2] = array(
      0 = array(
        'unit' => 2,
        'class' => 2,
        'value' => 'string5'
      )
    )
  )
)

私はここで同様の質問をしましたが、1回の繰り返し、つまりフィールドの1つだけで配列を構造化するだけで有効な答えを得ました。しかし、複数の反復、つまり複数のフィールドに対して同じソリューションを機能させることはできませんでした。

また、2つ以上のフィールドに応じて多次元配列を構築する解決策はありますか?

4

3 に答える 3

1

質問の仕方ではないと思います。それは非常に簡単です。配列やキーなどをいじることでこれを行うことができます..だから、最初に問題に一生懸命取り組む必要があります。試行の途中で問題が発生した場合は、ここで質問できます。私はあなたの問題を解決しました ここに完全なコード がありますが、次回はいくつかの作業を行ってから、問題のみを投稿してください。コードを尋ねることはありません。

foreach ($initialarray as $key1=>$val1)
{
    foreach ($val1 as $key2=>$val2)
    {            

        if($key2=='unit')
        {
            $num=$val2;
            if($val2!=$num)
            $testarr['unit'.$val2]=array();
        }
        if($key2=='class')
        {
            $testarr['unit'.$num]['class'.$val2][]=$val1;
        }

    }
}

print_r($testarr);
于 2012-06-05T13:00:45.017 に答える
0

私が次のように表現できるとしたら: 私はあなたの問題のフロントエンドしか見ておらず、そのバックエンドについては何も知りません。 . したがって、私の答えは本当の助けにはならないかもしれませんが、それでも「タペンス」を提供します。
そのすべてのデータをリレーショナル データベースに (テーブルの形式で) 格納できれば、配列を再配置する代わりにデータベースから必要なデータを選択する方がはるかに簡単かつ高速になります (!)。これにはさらに時間がかかります。比較において。
例として、 を持つunit = '1'すべてのアイテムおよび/またはを持つすべてのアイテムを選択 (および配列に格納) することができます。class = '2'. これにより、すべてのデータを多次元配列にしてから並べ替え/再配置するよりも、人生がはるかに簡単になります。特に、複数のプロパティに基づいてそれを行う場合。

于 2012-06-05T12:43:49.657 に答える