【问题标题】:PHP Array re-arrangingPHP数组重新排列
【发布时间】:2011-04-07 15:38:03
【问题描述】:

我有一个如下所示的数组:

array(3) {
  ["title"]=>
  array(3) {
    [0]=>
    string(3) "one"
    [1]=>
    string(3) "two"
    [2]=>
    string(4) "test"
  }
  ["file"]=>
  array(3) {
    [0]=>
    string(25) "company_handbook_2011.pdf"
    [1]=>
    string(8) "test.doc"
    [2]=>
    string(8) "test.doc"
  }
  ["status"]=>
  array(3) {
    [0]=>
    string(4) "SHOW"
    [1]=>
    string(4) "HIDE"
    [2]=>
    string(4) "HIDE"
  }
}

我怎样才能把它重新排列成这样:

array(
    array(
        "one",
        "company_handbook_2011.pdf",
        "SHOW"
    ),
    array(
        "two",
        "test.doc",
        "HIDE"
    ),
    array(
        "test",
        "test.doc",
        "HIDE"
    ),      
)

即获取每个数组的第一个元素并构建一个新数组,然后是第二个元素,依此类推。非常感谢您的帮助。

【问题讨论】:

  • 我认为没有现成的功能。您必须简单地循环遍历数组,然后构建它
  • 您不必遍历数组,因为索引似乎在您的不同键之间匹配。您可以计算$array['title'] 的数量,然后使用一个简单的 for 循环从正确的位置获取值来构造一个新数组。对哪种方法更快进行基准测试会很有趣。
  • 非常感谢你们提供的一些有用信息...感谢您的宝贵时间。 array_map 完成了这项工作。

标签: php arrays


【解决方案1】:

您正在搜索的内容称为矩阵的转置。这是 StackOverflow 上的先前答案:

Is there better way to transpose a PHP 2D array?

我冒昧地直接从该线程复制解决方案($array_of_arrays 是您的原始数组,$transposed_array 是结果):

$transposed_array = call_user_func_array('array_map', array_merge(array(NULL), $array_of_arrays));

【讨论】:

    【解决方案2】:
    foreach ($origArray['title'] as $k => $title) {
        $flatArr[] = array($title, $origArray['file'][$k], $origArray['status'][$k]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-12
      • 2015-04-03
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      相关资源
      最近更新 更多