簡體   English   中英

多維數組比較並創建新數組

[英]Multidimensional array compare and create new array

我有兩個不同的數組:

首先:

Array(
 [0] => Array
        (
         [sku] => A
        )
 [1] => Array
        (
         [sku] => B
        )
 [2] => Array
        (
         [sku] => A
        )
)

第二:

Array(
 [0] => Array
        (
         [sku] => A
         [path] => 3
        )
 [1] => Array
        (
         [sku] => B
         [path] => 3
        )
 [2] => Array
        (
         [sku] => C
         [path] => 78
        )
)

為了我應該刪除第一個數組中的重復項,然后比較兩個數組,找到相同的 SKU 並使用 sku 和相對路徑創建一個新數組。 我怎樣才能做到這一點?

在此先感謝您的幫助!

如果我正確地解決了問題,您需要第三個數組,其中包含 SKU 列表和第一個數組中存在的 SKU 的路徑。 以下代碼應該可以滿足您的需求。

<?php

$array1 = [
    [
        'sku' => 'A'
    ],
    [
        'sku' => 'B'
    ],
    [
        'sku' => 'A'
    ]
];

$array2 = [
    [
        'sku'  => 'A',
        'path' => 3
    ],
    [
        'sku'  => 'B',
        'path' => 3
    ],
    [
        'sku'  => 'C',
        'path' => 78
    ]
];

$uniqueSkuList = array_unique(array_map(static function ($el) {
    return $el['sku'];
}, $array1));

$array3 = [];
foreach ($array2 as $item) {
    if (in_array($item['sku'], $uniqueSkuList, true)) {
        $array3[] = $item;
    }
}

var_dump($array3);

假設您的第二個數組中有唯一的 skus,您只需要在 skus 上相交:

<?php

$one = 
[
    [
        'sku' => 'A'
    ],
    [
        'sku' => 'B'
    ],
    [
        'sku' => 'A'
    ]
];
$two = 
[
    [
        'sku' => 'A',
        'path' => 3
    ],
    [
        'sku' => 'B',
        'path' => 3
    ],
    [
        'sku' => 'C',
        'path' => 78
    ]
];


$result = array_intersect_key(array_column($two, null, 'sku'), array_column($one, null, 'sku'));
var_export($result);

Output:

array (
    'A' => 
    array (
      'sku' => 'A',
      'path' => 3,
    ),
    'B' => 
    array (
      'sku' => 'B',
      'path' => 3,
    ),
  )

或者獲取一個 sku 鍵映射到路徑的數組:

$sku_paths = array_intersect_key(array_column($two, 'path', 'sku'), array_column($one, null, 'sku'));
var_export($sku_paths);

Output:

array (
  'A' => 3,
  'B' => 3,
)

除了兩個已經存在的答案之外,我將在算法上對此進行更多描述,實際實現邏輯而不是用function解決它,因此您可以從中學習。

$result = [];

foreach ($array1 as $key1 => $value1) {
    foreach ($array2 as $key2 => $value2) {
        if (!isset($result[$value1['sku']])) {
            $result[$value1['sku']] = $value2['path'];
        }
    }
}    

暫無
暫無

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

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