如果一个数组的值被多次转换为,我将尝试更改该数组的值,并将重复的值更改为第一个。
我有这个阵列:
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);