PHP按对象键排序数组数组

时间:2013-06-15 20:30:01

标签: php arrays forms sorting ksort

我有一个表单,我正在创建一些项目数组:

<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中按每个数组中的'order'数字(即索引#4,即$pickup1-dropoff1Items[i][4])对数组进行排序。

可以使用PHP ksort()完成吗?有没有人知道如何使用PHP对这样的数组进行排序?

谢谢!

2 个答案:

答案 0 :(得分:1)

对于像这样的复杂数组的排序,您可以使用usort()之类的东西,它“使用用户定义的比较函数按值对数组进行排序”。

有关详细信息,请参阅php.net上的示例。

答案 1 :(得分:1)

它没有经过测试,但我认为这可以满足您的需求:

// 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的参数列表中。