[英]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.