PHP Сортировать массив массивов по ключу объекта

У меня есть форма, где я создаю несколько массивов элементов:

<input type="hidden" value="Full/Double Mattress" name="pickup1-dropoff1Items[1][0]">
<input type="text" name="pickup1-dropoff1Items[1][1]">
<input type="hidden" value="20" name="pickup1-dropoff1Items[1][2]">
<input type="hidden" value="FMat" name="pickup1-dropoff1Items[1][3]">
<input type="hidden" value="1" name="pickup1-dropoff1Items[1][4]">

поэтому структура в основном:

array(
    array('title', quantity, price, 'shorthand', order),
    array('title', quantity, price, 'shorthand', order)
)

так далее...

Я получаю эту информацию с помощью PHP и отправляю ее по электронной почте. Я могу получить один из этих массивов, например, так:

$pickup1_dropoff1Items = $_POST['pickup1-dropoff1Items'];

Я хотел бы отсортировать массивы в $pickup1_dropoff1Items по номеру "заказа" (т.е. индекс № 4, т.е. $pickup1-dropoff1Items[i][4]) в каждом из этих массивов.

Можно ли это сделать с помощью PHP ksort()? У кого-нибудь есть идеи, как отсортировать такой массив с помощью PHP?

Спасибо!

2 ответа

Решение

Это не проверено, но я думаю, что это будет делать то, что вам нужно:

// first create a new array of just the order numbers 
// in the same order as the original array
$orders_index = array();
foreach( $pickup1_dropoff1Items as $item ) {
  $orders_index[] = $item[4];
}

// then use a sort of the orders array to sort the original
// array at the same time (without needing to look at the 
// contents of the original)
array_multisort( $orders_index, $pickup1_dropoff1Items );

По сути, это пример 1 здесь: http://www.php.net/manual/en/function.array-multisort.php но наш $ar2 является массивом массивов вместо массива одиночных значений. Также, если вам нужен больший контроль над сортировкой, вы увидите примеры опций, которые вы можете использовать по этому URL: просто добавьте их в список аргументов для array_multisort,

Для сортировки сложных массивов, таких как этот, вы можете использовать что-то вроде usort() который "сортирует массив по значениям, используя пользовательскую функцию сравнения".

Смотрите пример на php.net для получения дополнительной информации.

Другие вопросы по тегам