【问题标题】:How can I rearrange an array by defining the key order?如何通过定义键顺序重新排列数组?
【发布时间】:2015-12-23 03:22:24
【问题描述】:

我有一个多维数组,我想用一个数组定义每个 subArray 的键的顺序。让我举个例子。

输入数组:

$array = 数组(
           数组("版本" => 1, "IP" => 1111, "名称" => "bbb"),
           数组(“版本”=> 3,“IP”=> 1112,“名称”=>“aaa”),
           数组(“版本”=> 2,“IP”=> 1113,“名称”=>“ccc”)
         );

我想做这样的事情:

$a_array = sort_headers($array, array("name", "version", "IP"));

我的预期输出将是(看看键的顺序如何根据上面传递的数组发生变化):

$a_array = array(
               数组("名称" => "bbb", "版本" => 1, "IP" => 1111),
               数组(“名称”=>“aaa”,“版本”=> 3,“IP”=> 1112),
               数组(“名称”=>“ccc”,“版本”=> 2,“IP”=> 1113)
             );

如果答案将是更少的代码或最佳优化的答案,那就太好了!

【问题讨论】:

  • 功能和问题?
  • 该函数实际上只是一个示例,问题实际上是我需要以更优化的方式提到的输出。无论如何,我可以使用一些 foreach 循环来实现输出,但如果你提供给我实现给定输出的最简单方法,那就太好了!
  • 你看过usort()吗?
  • 需要按版本排序吗?
  • 感谢 @Rizier123 的编辑,我现在可以意识到问题会是怎样的 :)

标签: php arrays sorting multidimensional-array


【解决方案1】:

这应该适合你:

只需对每个子数组使用array_replace() 即可重新排列您的元素。使用$header 作为第一个参数并使用array_flip() 它,这样值就是键,它定义了键的顺序。

然后在数组 ($header) 中找到的每个键都将填充它的值(每个子数组,$v)。

例如:

Header / Key order:
       Array ( [name] =>   [version] =>   [IP] =>   ) 
                         ↑              ↑         ↑
                         └──┐           │       ┌─┘
                         ┌──┼───────────┘       │
                         │  └───────────────────┼──┐
                         │          ┌───────────┘  │
                         |          │              |
    Array ( [version] => 1 [IP] => 1111 [name] => bbb ) 
(Each) Array:

---------------------
Result:
       Array ( [name] => bbb [version] => 1 [IP] => 1111 ) 

代码:

<?php

    $header = array("name", "version", "IP");

    $array = array_map(function($v)use($header){
        return array_replace(array_flip($header), $v);
    }, $array);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2019-10-10
    • 2013-06-24
    • 1970-01-01
    • 2022-09-29
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多