如何在php中按字母键排序数组数据

时间:2017-06-28 18:02:56

标签: php

我在索引键下方显示的数组中的数据集合是A,B,C但是我想将这些键存储在“key”中,并将其关键字的单词存储在“dishes”键中

array:3 [
      "A" => array:4 [
        0 => 37
        1 => "Algerian"
        2 => 6
        3 => "American"
      ]
      "B" => array:6 [
        0 => 27
        1 => "Belgian"
        2 => 20
        3 => "Brazilian"
      ]
      and so on..

我想把这个数组排序为如下所示的aplhabetic命令

array:10 [
  0 => array:2 [
    "key" => "A"
    "dishes" => array:2 [
    0=>array:2[
       "id" => 37
           "type" => "Algerian"
        ],
    1=>array:2[
       "id" => 6
           "type" => "American"
    ]   
    ]
  ]
  1 => array:2 [
    "key" => "B"
    "dishes" => array:2 [
    0=>array:2[
       "id" => 27
           "type" => "Belgian"
        ],
    1=>array:2[
       "id" => 20
           "type" => "Brazilian"
    ]   
    ]
  ]

依旧......

2 个答案:

答案 0 :(得分:0)

这可能是一个解决方案:

<?php
$input = [
    'A' => [
        0 => 37,
        1 => "Algerian",
        2 => 6,
        3 => "American"
    ],
    'B' => [
        0 => 27,
        1 => "Belgian",
        2 => 20,
        3 => "Brazilian"
    ]
];
$output = [];
array_walk($input, function($values, $key) use (&$output) {
    $entry = [
        'key' => $key,
        'dishes' => []
    ];
    foreach(array_chunk($values, 2) as $chunk) {
        $entry['dishes'][] = [
            'id' => $chunk[0],
            'type' => $chunk[1]
        ];
    }
    $output[] = $entry;
});
print_r($output);

上述代码的输出显然是:

Array
(
    [0] => Array
        (
            [key] => A
            [dishes] => Array
                (
                    [0] => Array
                        (
                            [id] => 37
                            [type] => Algerian
                        )

                    [1] => Array
                        (
                            [id] => 6
                            [type] => American
                        )

                )

        )

    [1] => Array
        (
            [key] => B
            [dishes] => Array
                (
                    [0] => Array
                        (
                            [id] => 27
                            [type] => Belgian
                        )

                    [1] => Array
                        (
                            [id] => 20
                            [type] => Brazilian
                        )

                )

        )

)

答案 1 :(得分:0)

您必须遍历原始数组才能创建新结构。然后,您可以使用ksort函数对它们进行排序。

$newArr = new array();
for ($arr as $elem) {
  $dishArr = new array();
  for($elem['dishes'] as $dish) {
    $dishArr[] = $dish['id'];
    $dishArr[] = $dish['type'];
  }

  $newArr[$elem['key']] = $dishArr;
}
ksort($newArr);