PHP:从子数组中的重复值中删除多维数组中的项目

时间:2017-07-11 11:29:53

标签: php arrays multidimensional-array

我不确定为什么会有这种负面声誉。建议的重复问题仅处理数组中的相同项。我正在寻找那个阵列中只有一个项目具有相同值的数组。

这是我的问题:

我需要根据其中一个键的值从多维数组中删除项目。这是一个数组样本。实际数组有3,000个项目。

 Array
    (
        [0] => Array
            (
                [ID] => 1553
                [Title] => Red Mini Dress
                [Size] => 8
                [Availability] => In stock
            )
        [1] => Array
            (
                [ID] => 1554
                [Title] => Red Mini Dress
                [Size] => 10
                [Availability] => Out of stock
            )
        [2] => Array
            (
                [ID] => 1555
                [Title] => Red Mini Dress
                [Size] => 12
                [Availability] => In stock
            )
        [3] => Array
            (
                [ID] => 2430
                [Title] => Black Cotton Trousers
                [Size] => 14
                [Availability] => In stock
            )
        ...
    )

所以你可以看到一些物品,比如“红色迷你连衣裙”,被列出了好几次。这是因为该项目的每个大小都有一个条目。

您还可以看到“红色迷你连衣裙”的尺寸8和12有库存,但不是10号。

现在,我需要减少数组,以便为​​每个产品只显示一个条目。除非所有尺码都缺货,否则Availability的值应为In stock

因此,对于上面的例子,“Red Mini Dress”应该只有一个条目,它应该是In stock

修改

到目前为止,我已尝试使用此方法,该方法根据ID的大小对数组进行排序:

function reduce_products($items) {
    $reduced = array();
    for($i = 0; $i < sizeof($items); $i++) {
            if (!array_key_exists($items[$i]['id'], $reduced) || $reduced[$items[$i]['id']]['title'] > $items[$i]['title'])
            $reduced[$items[$i]['id']] = $items[$i];
    }
    return $reduced;
}

代码改编自Removing duplicate values in Multi-Dimensional Array?

但这并没有删除任何值。

2 个答案:

答案 0 :(得分:0)

PHP 5.5+,您可以使用array_column。

<强>脚本

<?php 
$arr= array( 
           array( 'Id' => 111,
                  'Title' => "foo", 
                  'Number' => 15 
                ),
           array( 'Id' => 111,
                  'Title' => "foo", 
                  'Number' => 15 
                ),
           array( 'Id' => 125,
                  'Title' => "bar", 
                  'Number' => 15 
                )
         );

      var_dump(array_unique(array_column($arr, 'Id')));


?>

<强>输出:

array(2) {
  [0]=>
  int(111)
  [2]=>
  int(125)
}

答案 1 :(得分:0)

试试这个:

null
constructor(){}

输出:

<?php

$array = [
            [
                'ID'           => 1553,
                'Title'        => 'Red Mini Dress',
                'Size'         => 8,
                'Availability' => 'In stock',
            ],
            [
                'ID'           => 1554,
                'Title'        => 'Red Mini Dress',
                'Size'         => 10,
                'Availability' => 'Out of stock',
            ],
            [
                'ID'           => 1555,
                'Title'        => 'Red Mini Dress',
                'Size'         => 12,
                'Availability' => 'In stock',
            ],
            [
                'ID'           => 2430,
                'Title'        => 'Black Cotton Trousers',
                'Size'         => 14,
                'Availability' => 'In stock',
            ],
        ];