簡體   English   中英

我如何找到具有一個公用密鑰的兩個關聯數組之間的差異

[英]How i can Find Difference between two Associative arrays having one common Key

我在Magento 2.3中工作,我有兩個數組

第一個數組:

Array
(
    [0] => Array
        (
            [name] => /l/u/luma-foam-roller.jpg
            [image_id] => luma-foam-roller.jpg
        )

    [1] => Array
        (
            [name] => /l/u/luma-yoga-strap-set.jpg
            [image_id] => luma-yoga-strap-set.jpg
        )

    [2] => Array
        (
            [name] => /m/b/mb04-black-0.jpg
            [image_id] => mb04-black-0.jpg
        )

    [3] => Array
        (
            [name] => /l/u/luma-stability-ball-pink.jpg
            [image_id] => luma-stability-ball-pink.jpg
        )

    [4] => Array
        (
            [name] => /m/b/mb01-blue-0.jpg
            [image_id] => mb01-blue-0.jpg
        )
}

第二個數組:

Array
(
    [0] => Array
        (
            [name] => /m/b/mb01-blue-0.jpg
        )

    [1] => Array
        (
            [name] => /m/b/mb04-black-0.jpg
        )

    [2] => Array
        (
            [name] => /m/b/mb04-black-0_alt1.jpg
        )

    [3] => Array
        (
            [name] => /m/b/mb03-black-0.jpg
        )

    [4] => Array
        (
            [name] => /m/b/mb03-black-0_alt1.jpg
        )
}

我想根據名稱的不同找到期望的結果對我來說是

Array
(
    [0] => Array
        (
            [name] => /l/u/luma-foam-roller.jpg
            [image_id] => luma-foam-roller.jpg
        )

    [1] => Array
        (
            [name] => /l/u/luma-yoga-strap-set.jpg
            [image_id] => luma-yoga-strap-set.jpg
        )


    [3] => Array
        (
            [name] => /l/u/luma-stability-ball-pink.jpg
            [image_id] => luma-stability-ball-pink.jpg
        )

}

我嘗試了以下功能,但沒有一個對我有用

  • 和array_diff()
  • 和array_diff_assoc()
  • array_unique(array_merge($ array1,$ array2),SORT_REGULAR);

但沒有成功

我想不出有一個班輪函數可以自動執行此操作,但是一種簡單的方法就是使用循環。

$names = array_column($second, 'name');
$diff = array();
foreach ($first as $k => $values) {
    if (!in_array($values['name'], $names)) {
        $diff[$k] = $values;
    }
}
// print_r($diff);

基本上,您只需要首先獲取所有名稱(通過array_column )並使它們平坦即可,這樣您就可以利用in_array進行搜索和比較。

然后,這只是一個不起眼的foreachif在那時。 本示例創建差異的新副本。 如果您不想創建另一個副本,則可以只對第一個數組進行unset()並反轉條件,只保留原始副本中的區別。

array_udiff可以幫助:

function compare_by_name($a, $b) {
    $nameA = isset($a['name']) ? $a['name'] : '';
    $nameB = isset($b['name']) ? $b['name'] : '';

    return strcmp($nameA, $nameB);
}

print_r(array_udiff($arr1, $arr2, 'compare_by_name'));

暫無
暫無

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

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