Предположим, что у меня есть массив, который подражает таблице базы данных. Каждый элемент массива представляет строку, и в каждой строке другой массив, который содержит имена полей и значения.
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
)
}
Как Вы видите, я не должен сохранять ключи внешнего массива.
Вам необходимо использовать usort , функцию, которая сортирует массивы с помощью пользовательской функции. Что-то вроде:
function cmp($a, $b)
{
if ($a["price"] == $b["price"]) {
return 0;
}
return ($a["price"] < $b["price"]) ? -1 : 1;
}
usort($yourArray,"cmp")
Вы можете использовать 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
.
Вы можете использовать функцию usort с обратным вызовом