Как я сортирую многомерный массив по одному из полей внутреннего массива в PHP?

Предположим, что у меня есть массив, который подражает таблице базы данных. Каждый элемент массива представляет строку, и в каждой строке другой массив, который содержит имена полей и значения.

Array
(
    [0] => Array
        (
            [name] => 'Sony TV'
            [price] => 600.00
        )

    [1] => Array
        (
            [name] => 'LG TV'
            [price] => 350.00
        )

    [2] => Array
        (
            [name] => 'Samsung TV'
            [price] => 425.00
        )  
}

То, что я хочу сделать, является видом строки (внешние элементы массива) ценой. Ниже пример того, чего я хочу достигнуть:

Array
(
    [0] => Array
        (
            [name] => 'LG TV'
            [price] => 350.00
        )

    [1] => Array
        (
            [name] => 'Samsung TV'
            [price] => 425.00
        )

    [2] => Array
        (
            [name] => 'Sony TV'
            [price] => 600.00
        )        
}

Как Вы видите, я не должен сохранять ключи внешнего массива.

22
задан jmcampbell 18 July 2017 в 17:17
поделиться

3 ответа

Вам необходимо использовать usort , функцию, которая сортирует массивы с помощью пользовательской функции. Что-то вроде:

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

usort($yourArray,"cmp")
38
ответ дан 29 November 2019 в 03:29
поделиться

Вы можете использовать usort () :

function sort($a, $b) {
    if ($a['price'] == $b['price']) return 0;
    return ($a['price'] > $b['price']) ? 1 : -1;
}

usort($array, 'sort');

Еще лучше, если вы создадите такой класс, чтобы повторно использовать код:

class FieldSorter {
    public $field;

    function __construct($field) {
        $this->field = $field;
    }

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

$sorter = new FieldSorter('price');    
usort($array, array($sorter, "cmp"));

Таким образом, вы можете легко сортировать по другим полям.

И хотя вы сказали, что ключи внешнего массива не нужно сохранять, вы можете легко добиться этого, используя uasort () вместо usort .

14
ответ дан 29 November 2019 в 03:29
поделиться

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

http://www.php.net/manual/en/function.usort.php

1
ответ дан 29 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: