在MultiDimensional Array中对子阵列值进行排序

时间:2012-01-24 03:04:01

标签: php sorting

我正在尝试对从XML Feed发送的数组进行排序。

Array来自print_r($ answer);:

Array
(
[size] => Array
    (
        [0] => 1.5m x 1.5m
        [1] => 1.5m x 3m
        [2] => 3m x 6.0m
        [3] => 3m x 2.3m
    )

[rate] => Array
    (
        [0] => 80
        [1] => 135
        [2] => 295
        [3] => 180
    )

[sortorder] => Array
    (
        [0] => 3
        [1] => 4
        [2] => 1
        [3] => 2
    )
.
.
.
)

我想要拿出阵列:

    Array
(
[size] => Array
    (
        [0] => 3m x 6.0
        [1] => 3m x 2.3m
        [2] => 1.5m x 1.5m
        [3] => 1.5m x 3m
    )

[rate] => Array
    (
        [0] => 295
        [1] => 180
        [2] => 80
        [3] => 135
    )

[sortorder] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
    )
.
.
.
)

我要做的是使用Sort Order子数组按顺序显示项目

我已经尝试了一些uasort()和array_multisort()示例,但似乎都是按顺序排列子数组而不是子数组中的值

任何想法都会有很大的帮助。干杯

3 个答案:

答案 0 :(得分:0)

这种方法将重新构造数组,排序顺序为索引,对数组进行排序,然后将其返回到原始结构。

echo '<pre>';

$array['size'][0] = '1.5m x 1.5m';
$array['size'][1] = '1.5m x 3m';
$array['size'][2] = '3m x 6.0m';
$array['size'][3] = '3m x 2.3m';

$array['rate'][0] = 80;
$array['rate'][1] = 135;
$array['rate'][2] = 295;
$array['rate'][3] = 180;

$array['sortorder'][0] = 3;
$array['sortorder'][1] = 4;
$array['sortorder'][2] = 1;
$array['sortorder'][3] = 2;

$temp = array();
foreach($array['sortorder'] as $key => $value)
{
  $temp[$array['sortorder'][$key]] = array(
    'size'=>$array['size'][$key],
    'rate'=>$array['rate'][$key],
    'sortorder'=>$array['sortorder'][$key]
  );
}
ksort($temp);
$array = array();
foreach($temp as $key => $value)
{
  $array['size'][] = $value['size'];
  $array['rate'][] = $value['rate'];
  $array['sortorder'][] = $value['sortorder'];
}

print_r($array);

答案 1 :(得分:0)

我是否可以建议使用不同的数组结构,将每个大小,速率和排序顺序捆绑到一个项目中:

array(
    array('size' => '...', 'rate' => '...', 'sort order' => '...'),
    ...
)

这使得排序变得微不足道,事实上更容易使用 这个PHP 5.3+代码进行了这种转换和排序:

$answer = array_map(function ($size, $rate, $sortorder) {
              return compact('size', 'rate', 'sortorder');
          }, $answer);
usort($answer, function ($a, $b) { return $a['sortorder'] - $b['sortorder']; });

答案 2 :(得分:0)

这个排序$answer['sortorder']并使用这些键对$answer的其余部分进行排序,而不先重组。

// sort $answer['sortorder'] and retrieve indices.
asort($answer['sortorder']);
$idx = array_keys($answer['sortorder']); 

// do sorting
$sorted = array();
foreach($answer as $key=>$subarr) {
    if ($key != 'sortorder') { // don't sort
    foreach($idx as $i) {
        $sorted[$key][] = $subarr[$i];
    }
    } else {
        // $answer['sortorder'] is already sorted.
        $sorted[$key] = $subarr;
    }
}
print_r($sorted);

在行动here中查看。