唯一PHP数组
如何根据键值检查数组中的值是否唯一?下面是阵列的输出。我想删除基于“id”键的重复值。如果选中下面的复选框,则第二个和第三个数组除了“角色”值之外是相同的。因此,array_unique无法在此阵列上工作唯一PHP数组,php,arrays,Php,Arrays,如何根据键值检查数组中的值是否唯一?下面是阵列的输出。我想删除基于“id”键的重复值。如果选中下面的复选框,则第二个和第三个数组除了“角色”值之外是相同的。因此,array_unique无法在此阵列上工作 array 0 => array 'id' => string '1521422' (length=7) 'name' => string 'David Alvarado' (length=14) 'role' => s
array
0 =>
array
'id' => string '1521422' (length=7)
'name' => string 'David Alvarado' (length=14)
'role' => string 'associate producer ' (length=20)
1 =>
array
'id' => string '0098210' (length=7)
'name' => string 'Cristian Bostanescu' (length=19)
'role' => string 'line producer: Romania (as Cristi Bostanescu)' (length=46)
2 =>
array
'id' => string '1266015' (length=7)
'name' => string 'Bruno Hoefler' (length=13)
'role' => string 'co-producer ' (length=13)
3 =>
array
'id' => string '1266015' (length=7)
'name' => string 'Bruno Hoefler' (length=13)
'role' => string 'executive producer ' (length=20)
4 =>
array
'id' => string '1672379' (length=7)
'name' => string 'Alwyn Kushner' (length=13)
'role' => string 'associate producer ' (length=20)
试试这个:
<?php
$array = array(
array('id' => 1, 'text' => 'a'),
array('id' => 2, 'text' => 'b'),
array('id' => 1, 'text' => 'c'),
array('id' => 3, 'text' => 'd')
);
$array = array_filter($array, function ($item) {
static $found = array();
if (isset($found[$item['id']])) return false;
$found[$item['id']] = true;
return true;
});
var_dump($array);
试试这个:
<?php
$array = array(
array('id' => 1, 'text' => 'a'),
array('id' => 2, 'text' => 'b'),
array('id' => 1, 'text' => 'c'),
array('id' => 3, 'text' => 'd')
);
$array = array_filter($array, function ($item) {
static $found = array();
if (isset($found[$item['id']])) return false;
$found[$item['id']] = true;
return true;
});
var_dump($array);
基本上,您希望实现一个数组_unique
的变体,实现您想要的功能:
function array_unique_multi($arr,$key='id') {
// $arr is the array to work on
// $key is the key to make unique by
$ret = Array();
foreach($arr as $v) {
if( !isset($ret[$v[$key]])) $ret[$v[$key]] = $k;
}
return array_values($ret);
}
基本上,您希望实现一个变体array\u unique
,它满足您的需求:
function array_unique_multi($arr,$key='id') {
// $arr is the array to work on
// $key is the key to make unique by
$ret = Array();
foreach($arr as $v) {
if( !isset($ret[$v[$key]])) $ret[$v[$key]] = $k;
}
return array_values($ret);
}
您可以使用以下代码:
// assuming $arr is your original array
$narr = array();
foreach($arr as $key => $value) {
//$narr[json_encode($value)] = $key;
if (!array_key_exists($value["id"], $narr))
$narr[$value["id"]] = $key;
}
$narr = array_flip($narr);
foreach($arr as $key => $value) {
if (!array_key_exists($key, $narr))
unset($arr[$key]);
}
print_r($arr); // will have no duplicates
您可以使用以下代码:
// assuming $arr is your original array
$narr = array();
foreach($arr as $key => $value) {
//$narr[json_encode($value)] = $key;
if (!array_key_exists($value["id"], $narr))
$narr[$value["id"]] = $key;
}
$narr = array_flip($narr);
foreach($arr as $key => $value) {
if (!array_key_exists($key, $narr))
unset($arr[$key]);
}
print_r($arr); // will have no duplicates
你不能在数据库级别上解决这个问题吗?好的,你能告诉我们你想要数组的外观吗?哪些副本被删除了?你不能在数据库级别上解决这个问题吗?好的,你能告诉我们你想要数组的外观吗?哪些副本被删除了?我非常喜欢这个解决方案,因为每个条目只存储一次密钥+1此作品…感谢所有人的帮助…虽然我不会在这么短的时间内收到这么多回复…@BhaskarWankhede不客气,这就是StackOverflow的作用:)我非常喜欢此解决方案,因为您只为每个条目存储一次密钥+1本作品……感谢大家的帮助……虽然我不会在这么短的时间内收到这么多回复……@BhaskarWankhede不客气,这就是StackOverflow的作用:)