我正在尝试更改数组的值,如果其中一个值为几次,并且更改重复值将替换为第一个。
我有这个数组:
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'))
但没有发生任何事情
感谢您的帮助!
答案 0 :(得分:2)
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));
答案 1 :(得分:1)
这里有一个应该做的小功能:
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
是一个字符串。如果不需要,只需删除周围的引号。
答案 2 :(得分:1)
$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);