从具有多个数组的PHP中删除重复项

时间:2019-10-22 09:14:13

标签: php arrays advanced-custom-fields

这是我通过执行var_dump($getvals)从数组中获得的当前输出:

array(2) {
  ["value"]=>string(5) "150mm"
  ["label"]=>string(5) "150mm"
}
array(2) {
  ["value"]=>string(5) "150mm"
  ["label"]=>string(5) "150mm"
}
array(2) {
  ["value"]=>string(5) "150mm"
  ["label"]=>string(5) "150mm"
}
array(2) {
  ["value"]=>string(5) "150mm"
  ["label"]=>string(5) "150mm"
}
array(2) {
  ["value"]=>string(5) "125mm"
  ["label"]=>string(5) "125mm"
}
array(2) {
  ["value"]=>string(5) "125mm"
  ["label"]=>string(5) "125mm"
}

首先要实现的是忽略['label']表,然后尝试删除所有重复项(150mm和125mm)。我已经尝试过array_unique!inarray(),但是都行不通。这是我的代码:

$getvals = get_sub_field('option_diameter'); // This is my array
$takens = array(); // I create an empty array for later on
foreach ($getvals as $key => $getval){ // Running through the array
  if ($key == 'value'){ // Ignoring Label table
    if(!in_array($getval, $takens)){ // Check if the current value is already inside $takens array
      $takens[] = $getval; // If not, then put it
    }
  }
}
var_dump($takens); // The output is below

这是我从var_dump($takens)那里得到的:

array(1) {
  [0]=>string(5) "150mm"
}
array(1) {
  [0]=>string(5) "150mm"
}
array(1) {
  [0]=>string(5) "150mm"
}
array(1) {
  [0]=>string(5) "150mm"
}
array(1) {
  [0]=>string(5) "125mm"
}
array(1) {
  [0]=>string(5) "125mm"
}

不删除重复的值。有什么想法吗?

4 个答案:

答案 0 :(得分:0)

您需要先使用array_diff_key来获取value。然后,您需要使用array_column,其中将null作为第二个参数传递,并将按值唯一的键作为键来删除重复项(因为键不能重复)。然后重置索引array_values

这是脚本,

$takens = array_values(array_column(array_map(function ($a) {
    return array_diff_key($a, ['label' => '']);
}, $getvals), null, 'value'));

Demo

输出:-

array(2) {
  [0]=>
  array(1) {
    ["value"]=>
    string(5) "150mm"
  }
  [1]=>
  array(1) {
    ["value"]=>
    string(5) "125mm"
  }
}

答案 1 :(得分:0)

您可以使用array_column

 $r = array_values(array_column($a, null, 'label'));

OR

如果要保留单列

$r = array_values(array_column($a, 'value', 'label'));
print_r($r);

array_values将重新排列数组的键

工作示例:-https://3v4l.org/n8SA1

答案 2 :(得分:0)

使用密钥删除重复的Demo

$result = [];
foreach($array as $arr){
    $result[$arr['value']] = $arr;
}
print_r(array_values($result));

答案 3 :(得分:0)

您好像忘记了foreach。 这是几分钟前完成的测试:         

$aArrayTest = array (
            array(
                'value'=>'150mm',
                'label'=>'150mm'
            ), 
            array(
                'value'=>'150mm',
                'label'=>'150mm'
            ),
            array(
                'value'=>'150mm',
                'label'=>'150mm'
            ),
            array(
                'value'=>'150mm',
                'label'=>'150mm'
            ),
            array(
                'value'=>'125mm',
                'label'=>'125mm'
            ),
            array(
                'value'=>'125mm',
                'label'=>'125mm'
            )
        );

$aArrayResult = array(); foreach ($aArrayTest as $aArray) { // Running through the array of Arrays foreach ($aArray as $key => $value){ // Running through each array if ($key == 'value'){ // Ignoring Label table if(!in_array($value, $aArrayResult)){ // Check if the current value is already inside $takens array $aArrayResult[] = $value; // If not, then put it } } } } var_dump($aArrayResult);</pre>