PHP-多常规数组-如果数组中的值相同,则更改除第一个值之外的所有值


PHP - Multimentional array - If same value in array, change all values except first

如果其中一个值多次变为,我将尝试更改数组的值,并通过null更改第一个值之外的重复值。

我有这个数组:$array=

array (size=6)
  0 => 
    array (size=3)
      'id' => int 1
      'data-time-start' => int 0
      'data-time-end' => int 5
  1 => 
    array (size=3)
      'id' => int 2
      'data-time-start' => int 6
      'data-time-end' => int 10
  2 => 
    array (size=3)
      'id' => int 1
      'data-time-start' => int 11
      'data-time-end' => int 15
  3 => 
    array (size=3)
      'id' => int 3
      'data-time-start' => int 16
      'data-time-end' => int 20
  4 => 
    array (size=3)
      'id' => int 4
      'data-time-start' => int 21
      'data-time-end' => int 25
  5 => 
    array (size=3)
      'id' => int 3
      'data-time-start' => int 30
      'data-time-end' => int 35
  6 => 
    array (size=3)
      'id' =>  null
      'data-time-start' => int 40
      'data-time-end' => int 45
  7 => 
    array (size=3)
      'id' => int 3
      'data-time-start' => int 45
      'data-time-end' => int 60

在这个例子中,我有两次'id' = int 1和三次'id' = int 3。我想做的是保留第一个ID,但将其他重复的ID设置为NULL,并返回如下数组:

array (size=6)
  0 => 
    array (size=3)
      'id' => int 1
      'data-time-start' => int 0
      'data-time-end' => int 5
  1 => 
    array (size=3)
      'id' => int 2
      'data-time-start' => int 6
      'data-time-end' => int 10
  2 => 
    array (size=3)
      'id' => null
      'data-time-start' => int 11
      'data-time-end' => int 15
  3 => 
    array (size=3)
      'id' => int 3
      'data-time-start' => int 16
      'data-time-end' => int 20
  4 => 
    array (size=3)
      'id' => int 4
      'data-time-start' => int 21
      'data-time-end' => int 25
  5 => 
    array (size=3)
      'id' => null
      'data-time-start' => int 30
      'data-time-end' => int 35
  6 => 
    array (size=3)
      'id' => null
      'data-time-start' => int 40
      'data-time-end' => int 45
  7 => 
    array (size=3)
      'id' => null
      'data-time-start' => int 45
      'data-time-end' => int 60

试过了,但什么也没发生。。。

var_dump(setNulForDuplicatesInArray($array, 'id'))
function setNulForDuplicatesInArray($arr, $keyToFind)
    {
        $newArr = array();
        for ($i = 0; $i < sizeof($arr); $i++) {
            if (in_array($arr[$i], $newArr))
                $newArr[$i][$keyToFind] = null;
            else
                $newArr[] = $arr[$i];
        }
        return $newArr;
    }

array()是相同的。。。

谢谢!

一种方法是创建另一个容器,用于检查该特定ID是否已被获取。在每次迭代中,你都必须检查它。如果它已经在容器中,那么将该id设置为null。粗略示例:

$temp = array(); // temporary container
foreach($array as &$a) {
    if(!isset($temp[$a['id']])) { // if this id isn't here yet
        $temp[$a['id']] = $a; // push it inside
    } else {
        $a['id'] = null; // if its already taken, set it to null
    }
}

样本输出