PHP-如果数组中的相同和多个排除了第一个,则更改值


PHP - Change value if same and multiple in array exept the first

如果一个数组的值被多次转换为,我将尝试更改该数组的值,并将重复的值更改为第一个。

我有这个阵列:

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' => int 3
      'data-time-start' => int 40
      'data-time-end' => int 45

在这个例子中,我有两次'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

我不是php方面的专家。。。

编辑1:

尝试过:

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;
    }
var_dump(setNulForDuplicatesInArray($arr, 'id'))

但什么也没发生

谢谢你的帮助!

function setNulForDuplicates($theArray) {
    $myarray = array();
    for ($ind = 0; $ind < count($theArray); $ind++) {
        if (in_array($theArray[$ind], $myarray)) {
            $myarray[$ind]['id'] = 'null';
        } else {
            $myarray[$ind] = $theArray[$ind];
        }
    }
    return $myarray;
}
var_dump(setNulForDuplicates($arr));

这里有一个小函数可以完成任务:

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

它循环遍历数组,并检查$newArr中是否已经存在相同的条目。如果是,则id被设置为null。如果没有,则该条目将被推入$newArr

请注意,在本例中,null是一个字符串。我这么做是因为在您想要的结果中,null是一个字符串。如果不需要,只需去掉周围的引号。

$arr=array(
    array("id"=>1),
    array("id"=>2),
    array("id"=>1),
    array("id"=>3),
    array("id"=>4),
    array("id"=>3),
    array("id"=>3)
    );
var_dump($arr);
$tmp=array();
foreach($arr as $k =>$v){
    if(!in_array($v['id'], $tmp)){
        $tmp[]=$v['id'];
    }else{
        $arr[$k]['id']=null;
    }
}
var_dump($arr);