PHP - 多维数组 - 如果数组中的值相同,则更改除first之外的所有值

时间:2015-04-02 14:33:27

标签: php arrays

我正在尝试更改数组的值,如果其中一个值是多次进入并更改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()是一样的......

谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是创建另一个容器,用于检查是否已经使用了该特定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
    }
}

Sample Output