我有以下数组,
Array
(
[0] => 5600
[1] => 5600
[2] => 5500
[3] => 5500
[4] => 5003
[5] => 5002
[6] => 5001
[7] => 768
[8] => 768
[9] => 767
[10] => 730
[11] => 666
[12] => 575
)
现在我要删除在数组中存在多次的元素的索引。例如,我想要上面给出的数组。
Array
(
[0] => 5003
[1] => 5002
[2] => 5001
[3] => 767
[4] => 730
[5] => 666
[6] => 575
)
如果有人有钥匙,请分享您的想法。
答案 0 :(得分:2)
使用array_unique
消除重复值,使用array_values
恢复索引:
print_r(array_values(array_unique($arr)));
<强>更新强>:
$new = [];
foreach (array_count_values($arr) as $k => $v) {
if ($v == 1) {
$new[] = $k;
}
}
作为array_filter
的oneliner(自php5.6起):
$new = array_filter(
array_count_values($arr), function($v, $k) {
return $v == 1;
},
ARRAY_FILTER_USE_BOTH
);
答案 1 :(得分:2)
<?php
// sample input
$arr = array(1,1,2,2,2,3,4,5);
// input
print_r($arr);
// to retain keys
print_r(
array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
);
// to reset keys using array_values
print_r(
array_values(
array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
)
);
?>
测试结果
akshay@db-3325:/tmp$ php test.php
Array
(
[0] => 1
[1] => 1
[2] => 2
[3] => 2
[4] => 2
[5] => 3
[6] => 4
[7] => 5
)
Array
(
[5] => 3
[6] => 4
[7] => 5
)
Array
(
[0] => 3
[1] => 4
[2] => 5
)
答案 2 :(得分:0)
谢谢你的提问。我的解决方案不是很好。我用你的问题做了一点测试驱动开发。
{
"destinations": [
"6598760000",
"+659870001",
"tel+659870002",
"+33(509)758-000"
],
"template": {
"source": "BRAND",
"text": "Your message for all clients"
}
}
答案 3 :(得分:0)
使用简单的循环。 计算每个值出现的次数。然后循环通过这些频率。如果该值仅在添加到我们想要的数组时发生。
<?php
function only_unique(array $values) {
$result = $freq = array();
foreach($values as $value)
isset($freq[$value]) ? $freq[$value]++ : $freq[$value] = 1;
foreach($freq as $key => $value)
if($value == 1)
$result[] = $key;
return $result;
}
$nums = [1,2,2,3,3,3,4];
var_dump(only_unique($nums));
输出:
array(2) {
[0]=>
int(1)
[1]=>
int(4)
}
以上类似于:
$desired =
array_keys(
array_filter(
array_count_values($nums), function($v) {
return $v == 1;
}
)
);
答案 4 :(得分:0)
这里提供的几乎所有答案都是正确的....但是,再次...... 这是另一个答案:
<?php
$arr = [
5600, 5600, 5500, 5500, 5003, 5002,
5001, 768, 768, 767, 730, 666, 575,
];
function arraySansDuplicates($array){
$result = [];
foreach($array as $value){
if(!in_array($value, $result)){
$result[] = $value;
}else{
$key = array_search($value, $result);
unset($result[$key]);
}
}
return array_values($result);
}
var_dump( arraySansDuplicates($arr) );