Сортировать массив по значению дочернего массива в PHP - PullRequest
15 голосов
/ 20 апреля 2010

У меня есть массив, состоящий из массивов. Я хочу отсортировать родительский массив по свойству дочерних массивов. Вот пример

array(2){
    [0]=> array(3){
        [0]=> string(6) "105945"
        [1]=> string(10) "First name"
        [2]=> float(0.080878465391)
    }
    [1]=> array(3) {
        [0]=> string(6) "109145"
        [1]=> string(11) "Second name"
        [2]=> float(0.0504154818384)
    }
}

Я бы хотел отсортировать родительский массив по [2] по возрастанию в дочерних массивах, поэтому в этом случае результатом будет обращение дочерних массивов (.05, 08). Возможно ли это с помощью любой из многочисленных функций сортировки PHP?

Ответы [ 4 ]

27 голосов
/ 20 апреля 2010

Вы можете использовать функцию usort как:

$arr = array(
                array("105945","First name",0.080878465391),
                array("109145","Second name",0.0504154818384)
            );

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

usort($arr,"cmp");
4 голосов
/ 27 августа 2014

Для шаблонов, подобных базам данных, используйте array_multisort , как показано в примере # 3.

Например:

$sort = array();
foreach ($data as $key => $row) {
  $sort[$key]  = $row['basis'];
}
array_multisort($sort, SORT_ASC, $data);

, где $data - ваш массив данных, а basis - элемент, используемый для сортировки.

0 голосов
/ 25 апреля 2018

Начиная с PHP> = 7.0, вы можете использовать usort в сочетании с оператором космического корабля

usort($arr, function ($a, $b) {
        return $a[2] <=> $b[2];
    });

см .: http://php.net/manual/de/migration70.new-features.php

0 голосов
/ 20 апреля 2010

см. Эту страницу, например

http://php.net/manual/en/function.sort.php

или пример

      <?php 
function multisort($array, $sort_by) {
    foreach ($array as $key => $value) {
        $evalstring = '';
        foreach ($sort_by as $sort_field) {
            $tmp[$sort_field][$key] = $value[$sort_field];
            $evalstring .= '$tmp[\'' . $sort_field . '\'], ';
        }
    }
    $evalstring .= '$array';
    $evalstring = 'array_multisort(' . $evalstring . ');';
    eval($evalstring);

    return $array;
} 

$test = array(
    array( 'a' => '1', 'b' => '3'),
    array( 'a' => '2', 'b' => '1'),
    array( 'a' => '1', 'b' => '1'));

echo 'Unsorted: ';
print_r($test);

$result = multisort( $test , array('a','b') );

echo 'Sorted: ';
print_r($result);
?>

Result:

Unsorted: Array
(
    [0] => Array
        (
            [a] => 1
            [b] => 3
        )

    [1] => Array
        (
            [a] => 2
            [b] => 1
        )

    [2] => Array
        (
            [a] => 1
            [b] => 1
        )

)
Sorted: Array
(
    [0] => Array
        (
            [a] => 1
            [b] => 1
        )

    [1] => Array
        (
            [a] => 1
            [b] => 3
        )

    [2] => Array
        (
            [a] => 2
            [b] => 1
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...