0

配列のメイン キー (0,1,2) をサブ要素キー (user_id) に切り替えたいと思います。

たとえば、次の配列から:

    array(3) {
  [0]=>
  array(3) {
    ["num_products_user_by_ref"]=>
    string(1) "1"
    ["user_id"]=>
    string(2) "77"
    ["reference"]=>
    string(3) "E49"
  }
  [1]=>
  array(3) {
    ["num_products_user_by_ref"]=>
    string(1) "9"
    ["user_id"]=>
    string(3) "526"
    ["reference"]=>
    string(3) "E49"
  }
  [2]=>
  array(3) {
    ["num_products_user_by_ref"]=>
    string(2) "38"
    ["user_id"]=>
    string(3) "346"
    ["reference"]=>
    string(3) "E49"
  }
}

私は欲しい :

array(952) {
  [77]=>
  array(2) {
    ["num_products_user_by_ref"]=>
    string(1) "1"
    ["reference"]=>
    string(3) "E49"
  }
  [526]=>
  array(3) {
    ["num_products_user_by_ref"]=>
    string(1) "9"
    ["reference"]=>
    string(3) "E49"
  }
  [346]=>
  array(3) {
    ["num_products_user_by_ref"]=>
    string(2) "38"
    ["reference"]=>
    string(3) "E49"
  }

すべての user_id には、複数のペア num_products_user_by_ref/reference を含めることができます。実装するカスタム関数に関連付けられた、これを実現する関数 (ksort?) があることを覚えています。

4

1 に答える 1

1
$out = array();     
foreach ($arr as $key => $value){
    $out[$value['user_id']]["num_products_user_by_ref"] = $value["num_products_user_by_ref"]; 
    $out[$value['user_id']]["reference"] = $value["reference"];
}
print_r($out);

あなたの質問は、「すべての user_id には num_products_user_by_ref/reference. そのため、その可能性を可能にする別のバージョンを次に示します。

$out = array();     
foreach ($arr as $key => $value){
    $entry = array("num_products_user_by_ref" => $value["num_products_user_by_ref"],
                    "reference" => $value["reference"]);
    $out[$value['user_id']][] = $entry;
}

出力:

Array
(
    [77] => Array
        (
            [0] => Array
                (
                    [num_products_user_by_ref] => 1
                    [reference] => E49
                )
            [1] => Array
                (
                    [num_products_user_by_ref] => 5
                    [reference] => E49
                )
        )
    [526] => Array
        (
            [0] => Array
                (
                    [num_products_user_by_ref] => 9
                    [reference] => E49
                )
        )
    [346] => Array
        (
            [0] => Array
                (
                    [num_products_user_by_ref] => 38
                    [reference] => E49
                )
        )
)

従来のループが苦手な方向けの別のバージョンを次に示します。

$out = array();
array_walk($arr, function($e, $k) use(&$out){
    $entry = array("num_products_user_by_ref" => $e["num_products_user_by_ref"],
                    "reference" => $e["reference"]);
    $out[$e['user_id']][] = $entry;
});
于 2013-08-06T15:02:59.293 に答える