如何比较多维数组的每个第一个索引,如果它们相同则推入另一个数组

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

所以根据你的问题我可以给你这个解决方案:

  1. 解码json

    $data = json_decode(<your_json_string>)

  2. 然后我们可以使用array_reduce()函数得到结果数组。

$result = array_reduce($data, function (array $accumulator, $item) {
    $accumulator[$item->SKU][] = $item;

    return $accumulator;
}, []);

因此 $result 数组将包含具有每个 SKU 值键的维度数组