Php 将关联数组转换为索引数组的优雅方法
具有类似于Php 将关联数组转换为索引数组的优雅方法,php,arrays,Php,Arrays,具有类似于 $myarray = array ( 'user' => array ( 2 => 'john', 5 => 'done', 21 => 'foo' ), 'city' => array ( 2 => 'london', 5 => 'buenos aires', 21 => 'paris', ), 'age' => array (
$myarray = array (
'user' => array (
2 => 'john',
5 => 'done',
21 => 'foo'
),
'city' => array (
2 => 'london',
5 => 'buenos aires',
21 => 'paris',
),
'age' => array (
2 => 24,
5 => 38,
21 => 16
)
...
);
编辑
假设我不知道这个数组有多少个键,也不知道键本身它们可能是什么,以上只是一个例子
有没有什么优雅的方法可以使用内置函数而不是循环将其转换为
$result = array(
array(
'user',
'city',
'age'
...
),
array(
'john',
'london',
24
...
),
array(
'done',
'buenos aires',
38
...
),
array(
'foo',
'paris',
16
...
)
);
作为一个附带问题:如何以同样优雅的方式获得这一点
$result = array(
array(
'row',
'user',
'city',
'age'
...
),
array(
2,
'john',
'london',
24
...
),
array(
5,
'done',
'buenos aires',
38
...
),
array(
21,
'foo',
'paris',
16
...
)
);
请注意,这两个操作基本上都是原始数组的转置 <>这一切都是从考虑投票的强烈适应!p> 帮手 首先,我们需要一个helper函数,它将行标题保留为关联数组中的键:
function flipArrayKeys($arr) {
$out = array('row' => array_keys($arr));
foreach ($arr as $key => $subarr) {
foreach ($subarr as $subkey => $subvalue) {
$out[$subkey][] = $subvalue;
}
}
return $out;
}
flipArrayKeys$myarray提供:
第一部分
现在的结果是:
array (
0 =>
array (
0 => 'user',
1 => 'city',
2 => 'age',
),
1 =>
array (
0 => 'john',
1 => 'london',
2 => 24,
),
2 =>
array (
0 => 'done',
1 => 'buenos aires',
2 => 38,
),
3 =>
array (
0 => 'foo',
1 => 'paris',
2 => 16,
),
)
array (
0 =>
array (
0 => 'row',
1 => 'user',
2 => 'city',
3 => 'age',
),
1 =>
array (
0 => 2,
1 => 'john',
2 => 'london',
3 => 24,
),
2 =>
array (
0 => 5,
1 => 'done',
2 => 'buenos aires',
3 => 38,
),
3 =>
array (
0 => 21,
1 => 'foo',
2 => 'paris',
3 => 16,
),
)
这一部分也可以使用转置从以下位置完成:
第二部分
所以FlipArrayWithHeaders$myarray看起来像:
array (
0 =>
array (
0 => 'user',
1 => 'city',
2 => 'age',
),
1 =>
array (
0 => 'john',
1 => 'london',
2 => 24,
),
2 =>
array (
0 => 'done',
1 => 'buenos aires',
2 => 38,
),
3 =>
array (
0 => 'foo',
1 => 'paris',
2 => 16,
),
)
array (
0 =>
array (
0 => 'row',
1 => 'user',
2 => 'city',
3 => 'age',
),
1 =>
array (
0 => 2,
1 => 'john',
2 => 'london',
3 => 24,
),
2 =>
array (
0 => 5,
1 => 'done',
2 => 'buenos aires',
3 => 38,
),
3 =>
array (
0 => 21,
1 => 'foo',
2 => 'paris',
3 => 16,
),
)
请注意,这两个操作基本上都是原始数组的转置 <>这一切都是从考虑投票的强烈适应!p> 帮手 首先,我们需要一个helper函数,它将行标题保留为关联数组中的键:
function flipArrayKeys($arr) {
$out = array('row' => array_keys($arr));
foreach ($arr as $key => $subarr) {
foreach ($subarr as $subkey => $subvalue) {
$out[$subkey][] = $subvalue;
}
}
return $out;
}
flipArrayKeys$myarray提供:
第一部分
现在的结果是:
array (
0 =>
array (
0 => 'user',
1 => 'city',
2 => 'age',
),
1 =>
array (
0 => 'john',
1 => 'london',
2 => 24,
),
2 =>
array (
0 => 'done',
1 => 'buenos aires',
2 => 38,
),
3 =>
array (
0 => 'foo',
1 => 'paris',
2 => 16,
),
)
array (
0 =>
array (
0 => 'row',
1 => 'user',
2 => 'city',
3 => 'age',
),
1 =>
array (
0 => 2,
1 => 'john',
2 => 'london',
3 => 24,
),
2 =>
array (
0 => 5,
1 => 'done',
2 => 'buenos aires',
3 => 38,
),
3 =>
array (
0 => 21,
1 => 'foo',
2 => 'paris',
3 => 16,
),
)
这一部分也可以使用转置从以下位置完成:
第二部分
所以FlipArrayWithHeaders$myarray看起来像:
array (
0 =>
array (
0 => 'user',
1 => 'city',
2 => 'age',
),
1 =>
array (
0 => 'john',
1 => 'london',
2 => 24,
),
2 =>
array (
0 => 'done',
1 => 'buenos aires',
2 => 38,
),
3 =>
array (
0 => 'foo',
1 => 'paris',
2 => 16,
),
)
array (
0 =>
array (
0 => 'row',
1 => 'user',
2 => 'city',
3 => 'age',
),
1 =>
array (
0 => 2,
1 => 'john',
2 => 'london',
3 => 24,
),
2 =>
array (
0 => 5,
1 => 'done',
2 => 'buenos aires',
3 => 38,
),
3 =>
array (
0 => 21,
1 => 'foo',
2 => 'paris',
3 => 16,
),
)
将数组_值函数用作:
$result = array(array_values($myarray['user']),
array_values($myarray['city']),
array_values($myarray['age']));
对于问题的第二部分,您可以执行以下操作:
$result2 = array_keys($myarray);
foreach(array_keys($myarray['user']) as $k) {
$result2[] = array($k, $myarray['user'][$k], $myarray['city'][$k], $myarray['age'][$k]);
}
将数组_值函数用作:
$result = array(array_values($myarray['user']),
array_values($myarray['city']),
array_values($myarray['age']));
对于问题的第二部分,您可以执行以下操作:
$result2 = array_keys($myarray);
foreach(array_keys($myarray['user']) as $k) {
$result2[] = array($k, $myarray['user'][$k], $myarray['city'][$k], $myarray['age'][$k]);
}
如果我事先不知道钥匙怎么办?我编辑了我的问题以便更清楚地说明这一点……如果我事先不知道钥匙怎么办?我编辑了我的问题,以便更清楚地说明这一点……我需要一个不同混合的数组,请看得更好:例如,最后一个数组不是array24、38、16,而是数组'foo'、'paris',16。。他们完全改头换面了,我看错了问题;现在应该修好了!:不幸的是不是特别优雅。我需要一个不同混合的数组,请看得更好:例如,最后一个数组不是array24,38,16,而是数组'foo','paris',16。。他们完全改头换面了,我看错了问题;现在应该修好了!:不幸的是,它并不特别优雅。