Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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_Debian - Fatal编程技术网

PHP根据另一个数组中的特定键对数组进行排序

PHP根据另一个数组中的特定键对数组进行排序,php,arrays,sorting,debian,Php,Arrays,Sorting,Debian,可能重复: 如何按数组中的特定键对数组进行排序: array( array(5, 2), array(5, 3), array(3, 1), array(5, 4) ); 它是一个数组,有几个数组,每个数组有2个值,我如何按每个数组的第二个值排序,所以结果是: array( array(5, 1), array(5, 2), array(3, 3), array(5, 4) ); 这里有一些不会解决你的问题的方向(排序很奇怪),但可以引导你找到解决方案。 您

可能重复:

如何按数组中的特定键对数组进行排序:

array(
  array(5, 2),
  array(5, 3),
  array(3, 1),
  array(5, 4)
);
它是一个数组,有几个数组,每个数组有2个值,我如何按每个数组的第二个值排序,所以结果是:

array(
  array(5, 1),
  array(5, 2),
  array(3, 3),
  array(5, 4)
);

这里有一些不会解决你的问题的方向(排序很奇怪),但可以引导你找到解决方案。 您可以使用usort函数()并定义自己的比较器

如果知道排序逻辑,请将其添加到cmp函数中,如果两个元素相等,则返回0,-1(如果$a<$b),否则返回1

代码将如下所示:

function cmp($a, $b)
{
    if ($a[1] == $b[1]) {
        return 0;
    }
    return ($a[1] < $b[1]) ? -1 : 1;
}

$a = array(
  array(5, 2),
  array(5, 3),
  array(3, 1),
  array(5, 4)
);

usort($a, "cmp");
函数cmp($a,$b)
{
如果($a[1]=$b[1]){
返回0;
}
回报($a[1]<$b[1])?-1:1;
}
$a=数组(
阵列(5,2),
阵列(5,3),
阵列(3,1),
阵列(5,4)
);
usort($a,“cmp”);

这里有一种方法:

<?php

$input = array(
    array(5, 2),
    array(5, 3),
    array(3, 1),
    array(5, 4)
);

/**
 * Funkily sort the input array.
 * 
 * @param array $array
 *
 * @return array
 */
function funky_sort(array $array) {
    //Get the array of the first elements
    $first_elements = array_map(function($el) {
        return $el[0];
    }, $array);

    //Get the array of the second elements
    $second_elements = array_map(function($el) {
        return $el[1];
    }, $array);

    //Sort the second elements only
    sort($second_elements, SORT_NUMERIC);

    //Combine both arrays to the same format as the original
    $result = array();
    for ($i = 0; $i < count($first_elements); $i++) {
        $result[] = array($first_elements[$i], $second_elements[$i]);
    }

    //Fire away
    return $result;

}

var_dump(funky_sort($input));


你的第一个输出将是
数组(3,1)
而不是
数组(5,1)
谢谢你指出:)我正在为他的问题给出方向,这样他就可以定义cmp函数,但他需要在人们开始投票给你之前对你的答案做出解释…@RadoslavGeorgiev:问题是,这不是正确的方向。好好看看这个问题。这不是你每天都要问的“为我排序这个数组”的问题。@Osa:我以为你不想更改第一组元素的位置。要么我糊涂了,要么你糊涂了,后者更可能。我希望这对你有所帮助,但看看这个问题的措辞可能会更好。它以副本的形式关闭,因为它与列出的问题之间的差异不容易识别。这实际上得到了所需的输出+1.
<?php

function sort_by_second($randomArray)
{
    $tmparray1=array();
    $tmparray2=array();
    foreach ($randomArray as $key=>&$ra) {
        $tmparray1[$key]=$ra[1];
        $tmparray2[$key]=$ra[0];
    }
    asort($tmparray1);

    $rr=array();
    foreach ($tmparray1 as $key=>&$val) {
        $rr[$key]=array($tmparray2[$key],$val);
    }
    return $rr;}


$myArray = array(
    array(5, 2),
    array(5, 3),
    array(3, 1),
    array(5, 4)
);


$tt=sort_by_second($myArray);
print_r($tt);

?>