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