PHP多维数组格式转换求助:将键嵌套数组转为索引子数组
解决PHP多维数组重组问题
嘿,处理多文件上传时经常会碰到这种数组结构转换的需求,我给你几个原生PHP的实现方案,都是简单易维护的:
方法一:基础循环遍历(最直观)
这种方法逻辑清晰,适合刚接触PHP的开发者理解,核心就是先确定文件的数量,然后逐个索引把对应位置的字段组合起来:
// 你的原始数组 $originalArray = [ 'name' => ['third.png', 'second.png', 'first.png'], 'type' => ['image/png', 'image/png', 'image/png'], 'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'], 'error' => [0, 0, 0], 'size' => [179440, 102238, 75915] ]; $newArray = []; // 获取文件总数(取第一个字段的长度即可,假设所有字段长度一致) $count = count($originalArray['name']); for ($i = 0; $i < $count; $i++) { $newArray[] = [ 'name' => $originalArray['name'][$i], 'type' => $originalArray['type'][$i], 'tmp_name' => $originalArray['tmp_name'][$i], 'error' => $originalArray['error'][$i], 'size' => $originalArray['size'][$i] ]; } // 输出结果 print_r($newArray);
方法二:用array_map简化代码
如果想让代码更简洁,可以用array_map函数,它能把多个数组的对应元素传入回调函数,自动帮我们完成遍历:
$originalArray = [ 'name' => ['third.png', 'second.png', 'first.png'], 'type' => ['image/png', 'image/png', 'image/png'], 'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'], 'error' => [0, 0, 0], 'size' => [179440, 102238, 75915] ]; // 把每个字段的数组作为参数传给array_map $newArray = array_map(function($name, $type, $tmpName, $error, $size) { return [ 'name' => $name, 'type' => $type, 'tmp_name' => $tmpName, 'error' => $error, 'size' => $size ]; }, $originalArray['name'], $originalArray['type'], $originalArray['tmp_name'], $originalArray['error'], $originalArray['size']); print_r($newArray);
方法三:通用型遍历(适合字段不固定的情况)
如果你的字段可能会动态变化,不想硬编码字段名,可以用这种通用方法,自动遍历所有字段:
$originalArray = [ 'name' => ['third.png', 'second.png', 'first.png'], 'type' => ['image/png', 'image/png', 'image/png'], 'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'], 'error' => [0, 0, 0], 'size' => [179440, 102238, 75915] ]; $newArray = []; // 获取所有字段名 $keys = array_keys($originalArray); // 获取文件总数 $count = count($originalArray[$keys[0]]); for ($i = 0; $i < $count; $i++) { $item = []; foreach ($keys as $key) { $item[$key] = $originalArray[$key][$i]; } $newArray[] = $item; } print_r($newArray);
这三种方法都能实现你要的效果,第一种最直观,第二种最简洁,第三种最灵活,你可以根据自己的业务场景选择~
内容的提问来源于stack exchange,提问作者vikram choudhary
相关产品推荐
相关产品推荐

