Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将php数组按值与另一个数组进行排序_Php_Arrays_Sorting - Fatal编程技术网

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

将php数组按值与另一个数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,如何根据另一个数组对数组进行排序? 我说的是价值观,不是关键。我发现了很多关于如何对键进行排序的问题,但没有一个是关于值的 假设我有这个数组: $sizes = array("L", "XXXL", "M", "S"); 我如何将这些重新排序为如下所示: $newsizes = array("S", "M", "L", "XXXL"); 基于这样一个固定的人工逻辑阵列: $sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXX

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

假设我有这个数组:

$sizes = array("L", "XXXL", "M", "S");
我如何将这些重新排序为如下所示:

$newsizes = array("S", "M", "L", "XXXL");
基于这样一个固定的人工逻辑阵列:

$sizeincrement = array("XS", "S", "M", "L", "XL", "XXL", "XXXL");
考虑到不在sizeincrement数组中的元素,应该在末尾追加


我原以为这是一个现成的排序函数,但事实并非如此:

您可以使用自定义的
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");

工作示例:

您可以使用自定义的
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");

工作示例:

您可以使用自定义的
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");

工作示例:

您可以使用自定义的
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");

工作示例:

一个自定义函数可以很快完成这项工作!这是我的客人

$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中的数组中添加或删除新的大小


希望对你有所帮助

自定义函数可以很快完成这项工作!这是我的客人

$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中的数组中添加或删除新的大小


希望对你有所帮助

自定义函数可以很快完成这项工作!这是我的客人

$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中的数组中添加或删除新的大小


希望对你有所帮助

自定义函数可以很快完成这项工作!这是我的客人

$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中的数组中添加或删除新的大小


希望对你有所帮助

使用通用数组函数可以实现这一点:

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


它的工作原理如下:

使用通用数组函数可以实现这一点:

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


它的工作原理如下:

使用通用数组函数可以实现这一点:

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


它的工作原理如下:

使用通用数组函数可以实现这一点:

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




它正在工作:

array_intersect()将执行您需要的排序,而无需使用自定义函数或usort。请参阅。@DigitalChris,尽管交叉、扩散、合并数组是否真的比usort更有效仍有争议。=)@不,我想你没抓住重点。我还回答了他的第二部分“不在sizeincrement数组中的元素应该在末尾追加。”单线数组完成了其他答案所做的工作。事实上,唯一错误的部分是不存在的元素是在前面加上前缀而不是追加数组将执行您需要的排序,而无需使用自定义函数或usort。请参阅。@DigitalChris,尽管交叉、扩散、合并数组是否真的比usort更有效仍有争议。=)@不,我想你没抓住重点。我还回答了他的第二部分“不在sizeincrement数组中的元素应该在末尾追加。”单线数组完成了其他答案所做的工作。事实上,唯一错误的部分是不存在的元素是在前面加上前缀而不是追加数组将执行您需要的排序,而无需使用自定义函数或usort。请参阅。@DigitalChris,尽管交叉、扩散、合并数组是否真的比usort更有效仍有争议。=)@不,我想你没抓住重点。我还回答了他的第二部分“不在sizeincrement数组中的元素应该在末尾追加。”单线数组完成了其他答案所做的工作。事实上,唯一错误的部分是不存在的元素是在前面加上前缀而不是追加数组将执行您需要的排序,而无需使用自定义函数或usort。请参阅。@DigitalChris,尽管交叉、扩散、合并数组是否真的比usort更有效仍有争议。=)@不,我想你没抓住重点。我还回答了他的第二部分“不在sizeincrement数组中的元素应该附加在末尾。”单行数组_intersect完成了其他答案所做的工作。事实上,唯一错误的部分是,不存在的元素是前置的,而不是追加的。我认为您的答案丢失了。如果某些值在引用数组中不存在,它们将丢失。我可能错了,这给出了排序的$size,但没有将缺少的元素追加到末尾。我认为您的答案缺少了一些引用数组中不存在的值,它们将丢失。我可能错了,这给出了排序的$size,但没有将缺少的元素追加到末尾。我认为您的答案缺少了一些引用数组中不存在的值,它们将丢失。我可能错了,这给出了排序的$size,但没有将缺少的元素追加到末尾。我认为您的答案缺少了一些引用数组中不存在的值,它们将丢失。我可能错了这给出了排序后的$Size,但没有将缺少的元素追加到末尾。你忘了在末尾添加不在初始数组中的元素。@VincentDuprez不看他的输出:它只有4个元素。在给我指出正确路径时,对你的答案投了赞成票,谢谢,我会将Digital chris answer设置为正确答案,因为它正在考虑缺少的元素。@VincentDuprez不得不离开一会儿,对不起。很高兴至少能帮助您找到正确的路径,我强烈建议使用排序函数。更新了我的答案,如果需要额外的元素(或者任何你可能需要考虑的东西),添加更多的逻辑是很简单的