如何比较多维数组的每个第一个索引,如果它们相同则推入另一个数组
How to compare each first index of multidimensional array and to push into another array if they are the same
我会详细介绍。
假设我有一个这样的数组:
JSON 数组版本:
[
{
"SKU": "COL-10-49000 ",
"SHOP": "GWUK ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWUK ",
"FLDDEF": "Metafield_3 ",
"PARB": "icon_image_2 ",
"STAT1": "U ",
"FREIA1": "19000726159421 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWIN ",
"FLDDEF": "SEO_1 ",
"PARB": "title_tag ",
"STAT1": "U ",
"FREIA1": "19034707656748 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_14 ",
"PARB": "subtitle ",
"STAT1": " ",
"FREIA1": "19472915890220 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_9 ",
"PARB": "icon_label_1 ",
"STAT1": " ",
"FREIA1": "20117934276662 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_14 ",
"PARB": "icon_label_3 ",
"STAT1": "U ",
"FREIA1": "13660255911996 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWIN ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": " ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_3 ",
"PARB": "image ",
"STAT1": "U ",
"FREIA1": "13675072946236 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWUK ",
"FLDDEF": "Collection_Title ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Metafield_2 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "18980910989369 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Collection_Title ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_7 ",
"PARB": "subtitle ",
"STAT1": " ",
"FREIA1": "20117934211126 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": "166926024764 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": " ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_3 ",
"PARB": "video ",
"STAT1": "U ",
"FREIA1": "19038265573420 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_5 ",
"PARB": "icon_image_1 ",
"STAT1": " ",
"FREIA1": "20117934145590 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_12 ",
"PARB": "icon_image_3 ",
"STAT1": "U ",
"FREIA1": "13660255846460 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Metafield_5 ",
"PARB": "heading ",
"STAT1": "U ",
"FREIA1": "18980495228985 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_1 ",
"PARB": "subtitle ",
"STAT1": "U ",
"FREIA1": "13672656044092 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": " ",
"FREIA1": "57456984123 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_2 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "19038265540652 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWUK ",
"FLDDEF": "Image_URL ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_18 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "19587379658812 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_4 ",
"PARB": "video ",
"STAT1": " ",
"FREIA1": "20117934112822 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWUK ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": "261318574141 ",
"FREIA2": " "
}
]
我的目标是遍历数组并查看 SKU 与自身相等的位置。目标是然后将所有 SKU 相同的数组推送到不同的多维数组中。
因此,例如,SKU = COL-10-49000
的所有数组都应以 1 个多维数组结尾,而 SKU = COL-10-49310
的所有数组应以 1 个多维数组结尾。
这是我目前拥有的,但似乎并没有达到目的
foreach($aArray as $a) {
if($a[SKU] == $a[SKU]) {
array_push($bArray, $a)
}
}
然后我希望有一个如下所示的数组:
[0] => Array(
[0] => Array ([SKU] => COL-10-49310 [SHOP] => EU3 [FLDDEF] => Handle [PARB] => [STAT1] => U [FREIA1] => 166926024764 [FREIA2] =>)
[1] => Array ([SKU] => COL-10-49310 [SHOP] => EU3 [FLDDEF] => Collection_Title [PARB] => [STAT1] => U [FREIA1] => [FREIA2] =>)
[2] => Array ([SKU] => COL-10-49310 [SHOP] => INT1 [FLDDEF] => SEO_1 [PARB] => title_tag [STAT1] => U [FREIA1] => 19034707656748 [FREIA2] => )
)
[1] => Array([0] => Array ([SKU] => COL-10-49309 [SHOP] => EU3 [FLDDEF] => Handle [PARB] => [STAT1] => U [FREIA1] => 166926024764 [FREIA2] =>)
[1] => Array ([SKU] => COL-10-49309 [SHOP] => EU3 [FLDDEF] => Collection_Title [PARB] => [STAT1] => U [FREIA1] => [FREIA2] =>)
[2] => Array ([SKU] => COL-10-49309 [SHOP] => INT1 [FLDDEF] => SEO_1 [PARB] => title_tag [STAT1] => U [FREIA1] => 19034707656748 [FREIA2] => ))
所以每个 SKU 及其所有对应的数组都将放在一个多维数组中,然后我可以在其中以 ($i = 0; $i < count($aArray); $i++){}
样式循环遍历它。
听起来您想将数据拆分成单独的数组,每个数组仅包含与单个 SKU 相关的条目。
正如您在评论中提到的,顶级数组可以关联索引而不是数字索引,这使得通过从项目读取 SKU 将项目分配给每个子数组变得非常简单。
例如
$output = array();
foreach ($input as $item)
{
$sku = $item["SKU"];
$output[$sku][] = $item;
}
现场演示:http://sandbox.onlinephpfunctions.com/code/770b4fcc096449ee6c0a9fd39174f5b6bcd4106a
所以根据你的问题我可以给你这个解决方案:
解码json
$data = json_decode(<your_json_string>)
然后我们可以使用array_reduce()
函数得到结果数组。
$result = array_reduce($data, function (array $accumulator, $item) {
$accumulator[$item->SKU][] = $item;
return $accumulator;
}, []);
因此 $result
数组将包含具有每个 SKU 值键的维度数组
我会详细介绍。
假设我有一个这样的数组:
JSON 数组版本:
[
{
"SKU": "COL-10-49000 ",
"SHOP": "GWUK ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWUK ",
"FLDDEF": "Metafield_3 ",
"PARB": "icon_image_2 ",
"STAT1": "U ",
"FREIA1": "19000726159421 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWIN ",
"FLDDEF": "SEO_1 ",
"PARB": "title_tag ",
"STAT1": "U ",
"FREIA1": "19034707656748 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_14 ",
"PARB": "subtitle ",
"STAT1": " ",
"FREIA1": "19472915890220 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_9 ",
"PARB": "icon_label_1 ",
"STAT1": " ",
"FREIA1": "20117934276662 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_14 ",
"PARB": "icon_label_3 ",
"STAT1": "U ",
"FREIA1": "13660255911996 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWIN ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": " ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_3 ",
"PARB": "image ",
"STAT1": "U ",
"FREIA1": "13675072946236 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWUK ",
"FLDDEF": "Collection_Title ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Metafield_2 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "18980910989369 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Collection_Title ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_7 ",
"PARB": "subtitle ",
"STAT1": " ",
"FREIA1": "20117934211126 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": "166926024764 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": " ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_3 ",
"PARB": "video ",
"STAT1": "U ",
"FREIA1": "19038265573420 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_5 ",
"PARB": "icon_image_1 ",
"STAT1": " ",
"FREIA1": "20117934145590 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_12 ",
"PARB": "icon_image_3 ",
"STAT1": "U ",
"FREIA1": "13660255846460 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUFR ",
"FLDDEF": "Metafield_5 ",
"PARB": "heading ",
"STAT1": "U ",
"FREIA1": "18980495228985 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_1 ",
"PARB": "subtitle ",
"STAT1": "U ",
"FREIA1": "13672656044092 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": " ",
"FREIA1": "57456984123 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWIN ",
"FLDDEF": "Metafield_2 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "19038265540652 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWUK ",
"FLDDEF": "Image_URL ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Metafield_18 ",
"PARB": "icon ",
"STAT1": "U ",
"FREIA1": "19587379658812 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49000 ",
"SHOP": "GWEUEN ",
"FLDDEF": "Metafield_4 ",
"PARB": "video ",
"STAT1": " ",
"FREIA1": "20117934112822 ",
"FREIA2": " "
},
{
"SKU": "COL-10-49309 ",
"SHOP": "GWEUDE ",
"FLDDEF": "Body_HTML ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": " ",
"FREIA2": " "
},
{
"SKU": "COL-10-49310 ",
"SHOP": "GWUK ",
"FLDDEF": "Handle ",
"PARB": " ",
"STAT1": "U ",
"FREIA1": "261318574141 ",
"FREIA2": " "
}
]
我的目标是遍历数组并查看 SKU 与自身相等的位置。目标是然后将所有 SKU 相同的数组推送到不同的多维数组中。
因此,例如,SKU = COL-10-49000
的所有数组都应以 1 个多维数组结尾,而 SKU = COL-10-49310
的所有数组应以 1 个多维数组结尾。
这是我目前拥有的,但似乎并没有达到目的
foreach($aArray as $a) {
if($a[SKU] == $a[SKU]) {
array_push($bArray, $a)
}
}
然后我希望有一个如下所示的数组:
[0] => Array(
[0] => Array ([SKU] => COL-10-49310 [SHOP] => EU3 [FLDDEF] => Handle [PARB] => [STAT1] => U [FREIA1] => 166926024764 [FREIA2] =>)
[1] => Array ([SKU] => COL-10-49310 [SHOP] => EU3 [FLDDEF] => Collection_Title [PARB] => [STAT1] => U [FREIA1] => [FREIA2] =>)
[2] => Array ([SKU] => COL-10-49310 [SHOP] => INT1 [FLDDEF] => SEO_1 [PARB] => title_tag [STAT1] => U [FREIA1] => 19034707656748 [FREIA2] => )
)
[1] => Array([0] => Array ([SKU] => COL-10-49309 [SHOP] => EU3 [FLDDEF] => Handle [PARB] => [STAT1] => U [FREIA1] => 166926024764 [FREIA2] =>)
[1] => Array ([SKU] => COL-10-49309 [SHOP] => EU3 [FLDDEF] => Collection_Title [PARB] => [STAT1] => U [FREIA1] => [FREIA2] =>)
[2] => Array ([SKU] => COL-10-49309 [SHOP] => INT1 [FLDDEF] => SEO_1 [PARB] => title_tag [STAT1] => U [FREIA1] => 19034707656748 [FREIA2] => ))
所以每个 SKU 及其所有对应的数组都将放在一个多维数组中,然后我可以在其中以 ($i = 0; $i < count($aArray); $i++){}
样式循环遍历它。
听起来您想将数据拆分成单独的数组,每个数组仅包含与单个 SKU 相关的条目。
正如您在评论中提到的,顶级数组可以关联索引而不是数字索引,这使得通过从项目读取 SKU 将项目分配给每个子数组变得非常简单。
例如
$output = array();
foreach ($input as $item)
{
$sku = $item["SKU"];
$output[$sku][] = $item;
}
现场演示:http://sandbox.onlinephpfunctions.com/code/770b4fcc096449ee6c0a9fd39174f5b6bcd4106a
所以根据你的问题我可以给你这个解决方案:
解码json
$data = json_decode(<your_json_string>)
然后我们可以使用
array_reduce()
函数得到结果数组。
$result = array_reduce($data, function (array $accumulator, $item) {
$accumulator[$item->SKU][] = $item;
return $accumulator;
}, []);
因此 $result
数组将包含具有每个 SKU 值键的维度数组