php数组的正确转换方式
The correct way to convert php array
我有这样的数据数组
$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 5.5 开始,您可以使用 array_column and array_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++;
}
}
顺便说一下,无论其他实现如何,我都会使用它。
我有这样的数据数组
$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 5.5 开始,您可以使用 array_column and array_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++;
}
}
顺便说一下,无论其他实现如何,我都会使用它。