将php数组按值与另一个数组进行排序

时间:2014-01-08 18:55:38

标签: php arrays sorting

如何根据另一个数组对数组进行排序? 我说的是价值观,而不是关键。我发现了很多关于如何对键进行排序的问题,但没有关于值的问题。

想象一下,我有这个数组:

$sizes = array("L", "XXXL", "M", "S");

如何将这些重新排序为:

$newsizes = array("S", "M", "L", "XXXL");

基于像这样的固定人类逻辑数组:

$sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXXL");

考虑到不在sizeincrement数组中的元素应该在末尾附加。

我认为这会作为现成的排序函数存在,但看起来并非如此:PHP SORTING

3 个答案:

答案 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");

工作示例:http://3v4l.org/2Hp0g

答案 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);
?>

这里有效:https://eval.in/87279