如何在php中自定义数组索引?

时间:2012-02-16 23:33:29

标签: php multidimensional-array

我有一个多维数组或数组,我也在配置文件中使用。该文件也是手动编辑的,所以我想让一些键具有固定的位置。代码使用此数组读取配置文件,修改,插入密钥等,然后将其保存回来。在保存时我按键排序,但现在我发现它不够好。

有没有办法

  • 'full_name'始终作为第一个键
  • 'version'作为第二个
  • 以及其他按字母顺序排序的键?

数组样本......

array (
  'skroob' => 
  array (
    'ssh' => 'skroob',
    'codebase_path' => '/srv/www/htdocs/imacs/radek/4.0.1',
    'ssh_status' => 'ok',
    'version' => '4.0.1',
    'ssh_last_access' => '2012-Feb-17 10:07:26',
    'edu_url' => 'https://testing/imacs/radek/4.0.1',
    'full_name' => 'skroob 4.0.1',
  ),
  'testing' => 
  array (
    'full_name' => 'My beautiful testing server (trunk)',
    'version' => 'trunk',
    'ssh' => 'testing',
    'codebase_path' => '/srv/www/htdocs/imacs/radek/trunk',
    'ssh_last_access' => '2012-Feb-17 10:07:26',
    'ssh_status' => 'ok',
  ),
)

1 个答案:

答案 0 :(得分:1)

这是一种方式。它按键按字母顺序对数组进行排序。然后它反转数组并取消设置full_nameversion keys。然后它再次添加这些键,因此它们被放置在数组的末尾。最后,它再次反转阵列。有点hacky,但我不确定有更好的方法来做你所要求的。

ksort($arr['skroob']);

$arr['skroob'] = array_reverse($arr['skroob']);

$version = $arr['skroob']['version'];
$full_name = $arr['skroob']['full_name'];

unset($arr['skroob']['full_name'], $arr['skroob']['version']);

$arr['skroob']['version'] = $version;
$arr['skroob']['full_name'] = $full_name;

$arr['skroob'] = array_reverse($arr['skroob']);

另一个解决方案是使用uksort并编写一个小回调函数。这可能看起来更专业。