PHP 如何按字母顺序对数组的第二个维度进行排序

问题描述 投票:0回答:2

我正在尝试对以下数组的最后一个维度进行排序

$inventory = array(
    "author" => array(
        "1" => "Evans, Dave",
        "2" => "Burnett, Bill",
    ),
    "title" => array(
        "1" => "Designing your life",
    ),
    "subject" => array(
        "1" => "Vocational guidance",
        "2" => "Decision making",
        "3" => "Self-realization",
    )
);

所需的输出将是这样的:

author  Burnett, Bill
author  Evans, Dave
title   Designing your life
subject Decision making
subject Self-realization
subject Vocational guidance

有一堆排序示例不起作用。有任何想法吗?未经测试请不要乱回答。

php sorting multidimensional-array
2个回答
0
投票

您可以执行以下任一操作:

  1. 忽略索引关联(如 Rob 所评论):
array_walk($inventory, function(&$v, $k) {
    sort($v);
});

var_dump
返回:

array(3) {
  ["author"]=>
  array(2) {
    [0]=>
    string(13) "Burnett, Bill"
    [1]=>
    string(11) "Evans, Dave"
  }
  ["title"]=>
  array(1) {
    [0]=>
    string(19) "Designing your life"
  }
  ["subject"]=>
  array(3) {
    [0]=>
    string(15) "Decision making"
    [1]=>
    string(16) "Self-realization"
    [2]=>
    string(19) "Vocational guidance"
  }
}
  1. 维护索引关联:
array_walk($inventory, function(&$v, $k) {
    asort($v);
});

var_dump
返回:

array(3) {
  ["author"]=>
  array(2) {
    [2]=>
    string(13) "Burnett, Bill"
    [1]=>
    string(11) "Evans, Dave"
  }
  ["title"]=>
  array(1) {
    [1]=>
    string(19) "Designing your life"
  }
  ["subject"]=>
  array(3) {
    [2]=>
    string(15) "Decision making"
    [3]=>
    string(16) "Self-realization"
    [1]=>
    string(19) "Vocational guidance"
  }
}

请注意,这两种解决方案都会将索引类型从

string
更改为
int


0
投票

感谢 RJK(和 Rob Eyre)提供的有用答案。我找到了这个解决方案,在

asort
循环中使用
for

$keys = array_keys($inventory);
for ($i = 0; $i < count($inventory); $i++) {
    asort($inventory[$keys[$i]]); 
    foreach($inventory[$keys[$i]] as $key => $value) {
        echo $keys[$i]."&emsp;".$value."<br />";
    }
}
echo "<br />";

但我认为

array_walk
的解决方案更专业。

© www.soinside.com 2019 - 2024. All rights reserved.