簡體   English   中英

使用來自深子數組的值對數據進行分組

[英]Grouping data using a value from a deep subarray

如何使用多維數組第三級的列值分配第一級鍵?

我的輸入:

$array = [
    [
        ["ID" => 2, "vendor_id" => "37", "order_id" => 776],
    ],
    [
        ["ID" => 2, "vendor_id" => "37", "order_id" => 786],
    ]
];

我目前的輸出是這樣的:

array(1) {
[787]=>
  array(2) {
    [0]=>
    array(40) {
      ["ID"]=>
      string(1) "1"
      ["vendor_id"]=>
      string(2) "37"
      ["order_id"]=>
      string(3) "776"
    }
    [1]=>
    array(40) {
      ["ID"]=>
      string(1) "2"
      ["vendor_id"]=>
      string(2) "37"
      ["order_id"]=>
      string(3) "787"
    }
  }
}

我想將order_id的值單獨分組為一個鍵 - 最終結果如下所示:

array(1) {
  [776]=>
  array(2) {
    [0]=>
    array(40) {
      ["ID"]=>
      string(1) "2"
      ["vendor_id"]=>
      string(2) "37"
      ["order_id"]=>
      string(3) "776"
    }
  }
  [787]=>
  array(2) {
    [0]=>
    array(40) {
      ["ID"]=>
      string(1) "2"
      ["vendor_id"]=>
      string(2) "37"
      ["order_id"]=>
      string(3) "787"
    }
  }
}

獲取current項目或使用reset並通過order_id提取整個列索引:

$result = array_column(current($array), null, 'order_id');

如果可能有多個數組,則只需循環並附加:

$result = [];
foreach($array as $v) {
    $result += array_column($v, null, 'order_id');
}

你可以使用那個功能

//$array is your input array
//$mergedArray is the result wanted
$mergedArray = array_reduce($array, function($acc, $val) {
    foreach ($val as $order) {
        $acc[$order['order_id']] = $order;    
    }
    return $acc;
}, []);

你可以在http://sandbox.onlinephpfunctions.com/上試試

<?php
$array = [
    787 => [
        0 => [ "ID" => 1, "vendor_id" => "37", "order_id" => 776],
        1 => [ "ID" => 2, "vendor_id" => "37", "order_id" => 787],
        2 => [ "ID" => 1, "vendor_id" => "37", "order_id" => 790],
    ],
    734 => [
        0 => [ "ID" => 1, "vendor_id" => "37", "order_id" => 722],
        1 => [ "ID" => 2, "vendor_id" => "37", "order_id" => 735],
        2 => [ "ID" => 1, "vendor_id" => "37", "order_id" => 734],
    ],

];


$t = array_reduce($array, function($acc, $val) {
    foreach ($val as $order) {
        $acc[$order['order_id']] = $order;    
    }

    return $acc;
}, []);

var_dump($t);

其他答案不保持描述為所需輸出的多級結構。 order_id值必須用作第一級鍵,第二級鍵必須在遇到時遞增/索引。 這將允許多個條目共享相同的第一級密鑰。

foreach()內的foreach() :( Demo )

$result = [];
foreach ($array as $group) {
    foreach ($group as $row) {
        $result[$row['order_id']][] = $row;
    }
}
var_export($result);

array_reduce()foreach() :(演示

var_export(
    array_reduce(
        $array,
        function ($carry, $group) {
            foreach ($group as $row) {
                $carry[$row['order_id']][] = $row;
            }
            return $carry;
        }
    )
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM