转换php数组的正确方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了转换php数组的正确方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有像数据一样的数据

$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','tmp_name' => 'C:\xampp\tmp\PHP17BA.tmp','size' => (int) 6532
    ],(int) 2 => [
        'name' => 'avatar.jpg','tmp_name' => 'C:\xampp\tmp\PHP17BB.tmp','size' => (int) 6879
    ]
   ]

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

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

解决方法

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));
}

其中3是name,type,tmp_name等元素的数量.

Demo.

对于PHP<同样的事情5.5

$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++;
    }
}

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

脚本宝典总结

以上是脚本宝典为你收集整理的转换php数组的正确方法全部内容,希望文章能够帮你解决转换php数组的正确方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。