如何正确地使像这样的数组是唯一的?(说到唯一,我的意思是只删除array3,因为它是array2的副本)
array(
array( "Title", 50, 96 ),
array( "Other Title", 110, 225 ),
array( "Title", 110, 225 ),
array( "Title", 110, 225 ),
)在这种情况下,我希望过滤掉的唯一数组是最后一个数组(在本例中),但没有特定的顺序,手工操作不会减少它。(弹出目标位置)。这是一个相当大的数组,我在这里也必须考虑性能。
我也可以这样安排数据:
array(
array( "Title" => array( 50, 96 ), array(110, 225) )
array( "Other Title", array( 110, 225 ) )
)但这一次对我的事业没有帮助。
数组中没有唯一值(单独),但每个二级数组的值组合是唯一的。
发布于 2012-02-21 12:50:53
$array = array(array("Title", 50, 96), array("Other Title", 110, 225), array("Title", 110, 225), array("Title", 110, 225));
function remove_duplicates_multi_array($array) {
$serialized_arrays = array();
// serialize every array
foreach ($array as $key=>$value) {
$serialized_arrays[$key] = serialize($value);
}
// use array_unique to remove duplicates
$unique_array = array_unique($serialized_arrays);
$multi_unique = array();
//unserialize every item inside the array
foreach($unique_array as $key=>$value) {
$multi_unique[$key] = unserialize($value);
}
return $multi_unique;
}
var_dump(remove_duplicates_multi_array($array));发布于 2012-02-21 12:51:30
试试这个..。
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));发布于 2012-02-21 12:41:29
当然有人会用性能更好的解决方案击败我,但这是一个简单的解决方案。您所要做的就是“散列”原始数组,方法是将它们的所有元素连接起来,然后跟踪哪些元素已添加到唯一输入集中。仅当原始数组的“散列”(拼接值)尚未添加到散列数组中时,才能添加该数组。
$aMain = array(
array( "Title", 50, 96 ),
array( "Other Title", 110, 225 ),
array( "Title", 110, 225 ),
array( "Title", 110, 225 ),
);
$_aHashed = array();
$aUniqued = array();
foreach($aMain as $aUnhashed) {
$sHash = implode('', $aUnhashed);
if(!in_array($sHash, $_aHashed)) {
$_aHashed[] = $sHash;
$aUniqued[] = $aUnhashed;
}
}
var_dump($aUniqued);https://stackoverflow.com/questions/9372202
复制相似问题