在按顺序放置重复值时,保留数组的顺序的最佳方法是什么。
这是数组:
Array
(
[0] => Array
(
[location] => 1320 N Street
)
[1] => Array
(
[location] => 1316 N St
)
[2] => Array
(
[location] => 1320 N Street
)
)
我想将重复的位置分组,看起来像这样:
Array
(
[0] => Array
(
[location] => 1320 N Street
)
[1] => Array
(
[location] => 1320 N Street
)
[2] => Array
(
[location] => 1316 N St
)
)
我最初的想法是遍历数组并对位置键执行array_search以使索引成为重复位置,然后执行移位以移动位置。
感谢您的时间。
答案 0 :(得分:1)
这对我有用:
$arr = array(
array("location" => "1320 N Street"),
array("location" => "1320 N St"),
array("location" => "1320 N Street"),
);
$tmp = array();
$sorted = array();
foreach ($arr as $k => $v)
{
$s = serialize($v);
if (!isset($tmp[$s]))
{
$tmp[$s] = $k;
array_push($sorted, $v);
} else {
$sorted = array_merge(array_slice($sorted, 0, $tmp[$s]+1), array($v), array_slice($sorted, $tmp[$s]+1));
}
}
print_r($sorted);
示例输出:
Array
(
[0] => Array
(
[location] => 1320 N Street
)
[1] => Array
(
[location] => 1320 N Street
)
[2] => Array
(
[location] => 1320 N St
)
)
编辑:
您可以使用任何您喜欢的密钥代替$s = serialize($v);
,例如$s = $v["location"];
,如果它只是重要的位置。
答案 1 :(得分:0)
您可以使用array_multisort()执行此操作。
array_multisort($sub_array[0], SORT_ASC, SORT_STRING,
$sub_array[1], SORT_NUMERIC, SORT_DESC);