2

したがって、フォームに多次元配列があります(実際の配列は500以上のメンバーになる可能性があります)

$marr = array( array("s_id" => 1, 1.25 , 15),
               array("s_id" => 2, 0.75 , 25),
               array("s_id" => 1, 1.15 , 7) 
             ); 

メンバー配列の s_id 値でグループ化/インデックス化された配列に分割しようとしています

$sarr        = array(
                    1 => array(
                                 array("s_id" => 1, 1.25 , 15),
                                 array("s_id" => 1, 1.15 , 7) 
                                 ),
                    2 => array(
                                 array("s_id" => 2, 0.75 , 25)
                                 )
                    );

これを行うためのPHPの組み込み関数、またはこれを行うためのベストプラクティスの方法はありますか?

4

1 に答える 1

4

この結果を提供できる組み込み関数はありません。代わりに、配列を繰り返し処理し、s_id値に一致するキーが既に存在するかどうかを確認する必要があります。そのキーで新しい配列を作成しない場合。

$marr = array( array("s_id" => 1, 1.25 , 15),
               array("s_id" => 2, 0.75 , 25),
               array("s_id" => 1, 1.15 , 7) 
             ); 

// Holds the whole output
$output = array();

// Looping over the original array
foreach ($marr as $subarr) {
  // Check if the output array already has the s_id as a key
  if (!isset($output[$subarr['s_id']])) {
    // Initialize it
    $output[$subarr['s_id']] = array();
  }
  // Then append the current sub-array to the s_id array key
  $output[$subarr['s_id']][] = $subarr;
}
// Then call ksort() on the output array
// to sort the s_id keys in ascending order
ksort($output);

http://codepad.viper-7.com/SSBrAl

版画:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [s_id] => 1
                    [0] => 1.25
                    [1] => 15
                )

            [1] => Array
                (
                    [s_id] => 1
                    [0] => 1.15
                    [1] => 7
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [s_id] => 2
                    [0] => 0.75
                    [1] => 25
                )

        )

)
于 2013-03-03T17:26:41.900 に答える