Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中对多维数组排序_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

如何在PHP中对多维数组排序

如何在PHP中对多维数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我在网上尝试了几乎所有的建议,但我真的不知道如何对这个会话数组进行排序。 我要按项目名称排序 我有并且想要这个输出,但是我需要itemname来确定哪个item数组首先出现 Array ( [person] => Array ( [namex] => Array ( [itema] => Array ( [ite

我在网上尝试了几乎所有的建议,但我真的不知道如何对这个会话数组进行排序。 我要按项目名称排序

我有并且想要这个输出,但是我需要itemname来确定哪个item数组首先出现

Array
(
[person] => Array
    (
        [namex] => Array
            (
                [itema] => Array
                    (
                        [itemid] => 43
                        [itemname] => def
                    )

                [itemc] => Array
                    (
                        [itemid] => 33
                        [itemname] => abc
                    )

                [itemg] => Array
                    (
                        [itemid] => 29
                        [itemname] => ghi
                    )

            )

        [namey] => Array
            (
                [itemj] => Array
                    (
                        [itemid] => 12
                        [itemname] => abc
                    )

                [iteme] => Array
                    (
                        [itemid] => 44
                        [itemname] => jkl
                    )

                [itemr] => Array
                    (
                        [itemid] => 20
                        [itemname] => rst
                    )

            )

    )

所以,person保持不变,但是name、item、itemid和itemname总是不同的

有人能帮我按项目名称分类吗? 我需要像这样的数组,所以不能改变它


还有。。我需要稍后在foreach中访问它,以便打印出项目。

正如问题注释中所指出的,所需的输出并没有真正定义。您必须给出输出的具体定义,否则我们必须假设您可能在寻找什么:

<?php
$data = [
  "person" => [
    "namex" => [
      "itema" => [
        "itemid" => 43,
        "itemname" => "def"
      ],
      "itemc" => [
        "itemid" => 33,
        "itemname" => "abc"
      ],
      "itemg" => [
        "itemid" => 29,
        "itemname" => "ghi"
      ]
    ],
    "namey" => [
      "itemj" => [
        "itemid" => 12,
        "itemname" => "abc"
      ],
      "iteme" => [
        "itemid" => 44,
        "itemname" => "jkl"
      ],
      "itemr" => [
        "itemid" => 20,
        "itemname" => "rst"
      ]
    ]
  ]
];
foreach ($data["person"] as $personName => &$person) {
  uasort($person, function($a, $b) {
    return $a["itemname"] > $b["itemname"];
  });
}
print_r($data);

假设来自示例的输入通过数组表示为:

<?php
$array = [
    'person' => [
        'namex' => [
            'itema' => [
                'itemid' => 43,
                'itemname' => 'def'
            ],
            'itemb' => [
                'itemid' => 33,
                'itemname' => 'abc'
            ],
            'itemc' => [
                'itemid' => 29,
                'itemname' => 'ghi'
            ],
        ],
        'namey' => [
            'itema' => [
                'itemid' => 12,
                'itemname' => 'abc'
            ],
            'itemb' => [
                'itemid' => 44,
                'itemname' => 'jkl'
            ],
            'itemc' => [
                'itemid' => 20,
                'itemname' => 'rst'
            ],
        ],
    ]
];


这将输出

array(1) {
  'person' =>
  array(2) {
    'namex' =>
    array(3) {
      'itemb' =>
      array(2) {
        'itemid' =>
        int(33)
        'itemname' =>
        string(3) "abc"
      }
      'itema' =>
      array(2) {
        'itemid' =>
        int(43)
        'itemname' =>
        string(3) "def"
      }
      'itemc' =>
      array(2) {
        'itemid' =>
        int(29)
        'itemname' =>
        string(3) "ghi"
      }
    }
    'namey' =>
    array(3) {
      'itema' =>
      array(2) {
        'itemid' =>
        int(12)
        'itemname' =>
        string(3) "abc"
      }
      'itemb' =>
      array(2) {
        'itemid' =>
        int(44)
        'itemname' =>
        string(3) "jkl"
      }
      'itemc' =>
      array(2) {
        'itemid' =>
        int(20)
        'itemname' =>
        string(3) "rst"
      }
    }
  }
}

这可能对你有帮助我试过了。。无法使其工作:那么输出应该是什么样的呢?询问,因为目前尚不清楚在对分布在多个名称条目上的itemname列进行排序时应如何处理名称层。请给出预期输出阵列的布局。您的问题下方有一个编辑链接。用它来修改你的问题。我不太明白你的问题。我希望能够获得itemc[itemid]和itemname。我几乎要放弃了,我正在尝试实现代码建议,但没有任何效果。我需要对结果进行排序,当我回显每个项目时。我需要的是itemname的a-z顺序,不管它的名字是什么。
$ids = [];
foreach($array as $key => $value) {
    foreach ($value as $newKey => $value2) {
        $ids[$newKey] = array_column($value2, 'itemname');
        array_multisort($ids[$newKey], SORT_NATURAL, $array[$key][$newKey]);
    }
}

array(1) {
  'person' =>
  array(2) {
    'namex' =>
    array(3) {
      'itemb' =>
      array(2) {
        'itemid' =>
        int(33)
        'itemname' =>
        string(3) "abc"
      }
      'itema' =>
      array(2) {
        'itemid' =>
        int(43)
        'itemname' =>
        string(3) "def"
      }
      'itemc' =>
      array(2) {
        'itemid' =>
        int(29)
        'itemname' =>
        string(3) "ghi"
      }
    }
    'namey' =>
    array(3) {
      'itema' =>
      array(2) {
        'itemid' =>
        int(12)
        'itemname' =>
        string(3) "abc"
      }
      'itemb' =>
      array(2) {
        'itemid' =>
        int(44)
        'itemname' =>
        string(3) "jkl"
      }
      'itemc' =>
      array(2) {
        'itemid' =>
        int(20)
        'itemname' =>
        string(3) "rst"
      }
    }
  }
}