[英]Change array in PHP by modifying the structure
我有下面的数组:
$test = array(
'key_a' => array('a', 'b'),
'key_b' => array('c', 'd')
);
我想转换为以下格式:
$test = array(
array(
'key_a' => 'a',
'key_b' => 'c'
),
array(
'key_a' => 'b',
'key_b' => 'd'
)
);
可能吗? 我怎样才能做到这一点?
我认为您可以使用以下内容:
$test = array(
'key_a' => array('a', 'b'),
'key_b' => array('c', 'd')
);
$max_length = 0;
$data = array();
foreach($test as $key => $value) { //Find the max_length of all subarrays
$this_length = count($value);
if ($this_length > $max_length) {
$max_length = $this_length;
}
}
for($i = 0; $i < $max_length; $i++) { //For all subarray's values (horizontal)
foreach($test as $key => $value) { //Foreach array (vertical)
if (isset($value[$i])) { //If the value is set
$data[$i][$key] = $value[$i];
}
}
}
var_dump($data);
结果:
array (size=2)
0 =>
array (size=2)
'key_a' => string 'a' (length=1)
'key_b' => string 'c' (length=1)
1 =>
array (size=2)
'key_a' => string 'b' (length=1)
'key_b' => string 'd' (length=1)
也适用于不均匀数组:
$test = array(
'key_a' => array('a', 'b', 'M'),
'key_b' => array('c', 'd',)
);
结果:
array (size=3)
0 =>
array (size=2)
'key_a' => string 'a' (length=1)
'key_b' => string 'c' (length=1)
1 =>
array (size=2)
'key_a' => string 'b' (length=1)
'key_b' => string 'd' (length=1)
2 =>
array (size=1)
'key_a' => string 'M' (length=1)
解决方案之一是:
$test = array(
'key_a' => array('a', 'b'),
'key_b' => array('c', 'd')
);
$result = array();
foreach ($test as $arrays) {
$result = array_merge_recursive(
$result,
array_combine(
array_keys($test),
array_chunk($arrays, 1)
)
);
}
foreach ($result as $key => &$value) {
$value = array_combine(array_keys($test), $value);
}
echo '<pre>';
print_r($result);
echo '</pre>';
结果将是:
Array
(
[key_a] => Array
(
[key_a] => a
[key_b] => c
)
[key_b] => Array
(
[key_a] => b
[key_b] => d
)
)
遍历阵列并同时重建新阵列。
function arrayTranspose($myArray) {
$result = array();
foreach ($myArray as $mainKey => $subArray) {
foreach ($subArray as $subKey => $value) {
if (!isset($result[$subKey]))
$result[$subKey] = array();
$result[$subKey][$mainKey] = $value;
}
}
return $result;
}
对的,这是可能的。 您可以使用array_values-此函数返回数组中的所有值并以数字方式索引数组。
尝试这个:
<?php
$test = array(
'key_a' => array('a', 'b'),
'key_b' => array('c', 'd')
);
$test = array_values($test);
echo '<pre>';
print_r( $test );
echo '</pre>';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.