【问题标题】:The correct way to convert php array转换php数组的正确方法
【发布时间】:2015-12-31 05:46:11
【问题描述】:

我有类似的数据数组

    $data = [
    'name' => [
        (int) 0 => '095a108478345cac184f956b1e8dee91a5a89f87bbabd7b3fb4058f577adf.jpg',
        (int) 1 => '02059.jpg',
        (int) 2 => 'avatar.jpg'
    ],
    'type' => [
        (int) 0 => 'image/jpeg',
        (int) 1 => 'image/jpeg',
        (int) 2 => 'image/jpeg'
    ],
    'tmp_name' => [
        (int) 0 => 'C:\xampp\tmp\php17AA.tmp',
        (int) 1 => 'C:\xampp\tmp\php17BA.tmp',
        (int) 2 => 'C:\xampp\tmp\php17BB.tmp'
    ],
    'error' => [
        (int) 0 => (int) 0,
        (int) 1 => (int) 0,
        (int) 2 => (int) 0
    ],
    'size' => [
        (int) 0 => (int) 80542,
        (int) 1 => (int) 6532,
        (int) 2 => (int) 6879
    ]
  ]

我需要像这样转换为数组

    $data = [
    (int) 0 => [
        'name' => '095a108478345cac184f956b1e8dee91a5a89f87bbabd7b3fb4058f577adf.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17AA.tmp',
        'error' => (int) 0,
        'size' => (int) 80542
    ],
    (int) 1 => [
        'name' => '02059.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17BA.tmp',
        'error' => (int) 0,
        'size' => (int) 6532
    ],
    (int) 2 => [
        'name' => 'avatar.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17BB.tmp',
        'error' => (int) 0,
        'size' => (int) 6879
    ]
   ]

我正在寻找将第一个 php 数组转换为第二个的正确方法。是否为这些操作提供了任何 PHP 数组函数。 CakePHP 哈希数组管理是否可行?

是的,我可以创建几个 foreach 循环并创建我需要的数组,但我不确定是否有更优雅的方式。

【问题讨论】:

    标签: php arrays cakephp file-upload upload


    【解决方案1】:

    从 PHP 5.5 开始,您可以使用 array_columnarray_combine 来执行此操作。

    $ret = []; $keys = array_keys($data);
    for ($i=0; $i<3; $i++) {
        $ret[$i] = array_combine($keys, array_column($data, $i));
    }
    

    其中3nametypetmp_name等的元素个数

    Demo.

    对于 PHP 也是一样的

    $ret = []; $keys = array_keys($data);
    for ($i=0; $i<3; $i++) {
        $ret[$i] = array_combine($keys, array_map(function($element) use ($i){
            return $element[$i];
        }, $data));
    }
    

    Demo.

    这里是一个例子,为了完整起见,只有两个foreach

    $ret = [];
    foreach($data as $key => $val) {
        $i = 0;
        foreach ($val as $v) {
            $ret[$i][$key] = $v;
            $i++;
        }
    }
    

    顺便说一句,无论其他实现如何,我都会使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2012-08-19
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多