0

我想用子元素键(user_id)切换数组的主键(0,1,2)。

例如,从这个数组:

    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 可以包含超过 1 对 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 可能包含超过 1 对 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 回答