代码之家  ›  专栏  ›  技术社区  ›  Ian McIntyre Silber

多维数组中特定键的数组差异

  •  4
  • Ian McIntyre Silber  · 技术社区  · 15 年前

    $products = array(
        [0] => array(
            ['product_id'] => 33
            ['variation_id'] => 0
            ['product_price'] => 500.00
        ),
        [1] => array(
            ['product_id'] => 48
            ['variation_id'] => 0
            ['product_price'] => 600.00
        ),
    )
    

    我想能够返回一个列表,只有那些产品没有找到第二个数组,根据产品ID。

    我只关心在第二个数组中找不到的那些,而不关心在第一个数组中添加的其他数组,因此array_diff似乎不会起作用。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Frxstrem    15 年前

    一个简单的foreach循环就足够了:

    <?php
    $products = array(
        0 => array(
            'product_id' => 33,
            'variation_id' => 0,
            'product_price' => 500.00
        ),
        1 => array(
            'product_id' => 48,
            'variation_id' => 0,
            'product_price' => 600.00
        )
    );
    
    $products2 = array(
        1 => array(
            'product_id' => 48,
            'variation_id' => 0,
            'product_price' => 600.00
        ),
        2 => array(
            'product_id' => 49,
            'variation_id' => 0,
            'product_price' => 600.00
        )
    );
    
    $diff = array();
    
    // Loop through all elements of the first array
    foreach($products2 as $value)
    {
      // Loop through all elements of the second loop
      // If any matches to the current element are found,
      // they skip that element
      foreach($products as $value2)
      {
        if($value['product_id'] == $value2['product_id'])
        continue 2;
      }
      // If no matches were found, append it to $diff
      $diff[] = $value;
    }
    

    $diff数组将只保存以下值:

    array (
      0 => 
      array (
        'product_id' => 49,
        'variation_id' => 0,
        'product_price' => 600,
      ),
    )
    

        2
  •  11
  •   Brandon Horsley    15 年前

    array_udiff . 这允许您指定如何使用回调函数比较这两个数组。您只需创建一个基于产品id进行比较的回调。

    <?php
    $products = array(
        0 => array(
            'product_id' => 33,
            'variation_id' => 0,
            'product_price' => 500.00
        ),
        1 => array(
            'product_id' => 48,
            'variation_id' => 0,
            'product_price' => 600.00
        )
    );
    
    $products2 = array(
        1 => array(
            'product_id' => 48,
            'variation_id' => 0,
            'product_price' => 600.00
        ),
        2 => array(
            'product_id' => 49,
            'variation_id' => 0,
            'product_price' => 600.00
        )
    );
    
    function compare_ids($a, $b)
    {
      return $b['product_id'] - $a['product_id'];
    }
    
    var_dump(array_udiff($products, $products2, "compare_ids"));
    ?>
    

    输出:

    array(1) {
      [0]=>
      array(3) {
        ["product_id"]=>
        int(33)
        ["variation_id"]=>
        int(0)
        ["product_price"]=>
        float(500)
      }
    }