如何根据另一个数组对数组进行排序? 我说的是价值观,而不是关键。我发现了很多关于如何对键进行排序的问题,但没有关于值的问题。
想象一下,我有这个数组:
$sizes = array("L", "XXXL", "M", "S");
如何将这些重新排序为:
$newsizes = array("S", "M", "L", "XXXL");
基于像这样的固定人类逻辑数组:
$sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXXL");
考虑到不在sizeincrement数组中的元素应该在末尾附加。
我认为这会作为现成的排序函数存在,但看起来并非如此:PHP SORTING
答案 0 :(得分:1)
您可以非常轻松地使用自定义usort
回调函数执行此操作。像这样:
function compare($a, $b) {
$sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXXL");
if(!array_search($a, $sizeincrement)) return 1;
if(!array_search($b, $sizeincrement)) return -1;
return array_search($a, $sizeincrement) > array_search($b, $sizeincrement);
}
然后致电:
usort($sizes, "compare");
答案 1 :(得分:1)
自定义功能可以快速完成工作!这是我的客人
$sizes = array("L", "XXXL", "M", "S");
function sort_size($arr) {
$out = array();
foreach (array("XS", "S", "M", "L", "XL", "XXL", "XXXL") as $size) {
if (in_array($size, $arr)) {
$out[] = $size;
}
}
return $out;
}
$newSizes = sort_size($sizes);
就像你可以直接在foreach中的数组中添加或删除新的大小。
希望有所帮助!答案 2 :(得分:1)
使用通用数组函数可以实现此目的:
<?php
$sizes = array("L", "XXXL", "M", "S");
$sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXXL");
//this will give you the array you need in the order you need:
$sorted_array = array_intersect($sizeincrement,$sizes);
//now get the ones NOT in the array:
$missing_array = array_diff($sizeincrement,$sizes);
$final_array = array_merge($sorted_array, $missing_array);
var_dump($final_array);
?>