Dan*_*ard 5 php arrays multidimensional-array
我试图使用array_combine来组合两个多维数组,但不知何故不正确.
这是array1:
Array(
[Nov 18, 2011] => Array(
[C] => 107705.5792
[I] => 44561.52
)
[Nov 22, 2011] => Array(
[C] => -8992.8352
)
)
Run Code Online (Sandbox Code Playgroud)
这是array2:
Array(
[Nov 18, 2011] => Array(
[C] => 3
[I] => 1
)
[Nov 22, 2011] => Array(
[C] => 2
)
)
Run Code Online (Sandbox Code Playgroud)
这是我对array_combine的尝试,它不起作用:
$array1 = ($arr1);
$array2 = ($arr2);
$result = array_combine($arr1, $arr2);
echo '<pre>';
print_r($result);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?这是我正在寻找的结果:
Array(
[Nov 18, 2011] => Array(
[3] => 107705.5792
[1] => 44561.52
)
[Nov 22, 2011] => Array(
[2] => -8992.8352
)
)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我发现如果我改为使用array_merge_recursive,这是我得到的结果.不是我想要的,但关闭:
Array(
[Nov 18, 2011] => Array(
[C] => Array(
[0] => 3
[1] => 107705.5792
)
[I] => Array(
[0] => 1
[1] => 44561.52
)
)
[Nov 22, 2011] => Array(
[C] => Array(
[0] => 2
[1] => -8992.8352
)
)
)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试实施以下建议之一的方式,但这对我不起作用.怎么了?:
function cust_array_merge(array &$array1, array $array2){
// loop through main array
foreach ($array1 as $key => $val) {
// check if $array2 has the same index
if (array_key_exists($key, $array2)) {
// reset $array1's indexes to $array2's values
foreach ($array2[$key] as $subKey => $subVal) {
if (array_key_exists($subKey, $array1[$key])) {
$tempVal = $array1[$key][$subKey];
unset($array1[$key][$subKey]);
$array1[$key][$subVal] = $tempVal;}}}}}
$merged = cust_array_merge($arr_cats_per_bill_date, $arr_cvat);
echo '<pre>';
print_r($merged);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
array_merge_recursive让你非常接近(你的“键”位于叶数组的索引 1 中,你的值位于索引 0 中)。因此,分两步进行:首先获取合并的数组,然后摆弄分支以使其正确。
// This is a callback for array_map() which should have some more generic uses.
// array(array('k', 'v'), ...) -> array('k' => 'v', ...)
function flatten_branches($branches) {
$newleaves = array();
foreach ($branches as $leaf) {
$newleaves[$leaf[0]] = $leaf[1];
}
return $newleaves;
}
function merge_flatten_branches($karray, $varray) {
//$karray has the key-leaves, and $varray has the value-leaves
$m1 = array_merge_recursive($karray, $varray);
return array_map('flatten_branches', $m1);
}
$merged = merge_flatten_branches($array2, $array1);
print_r($merged);
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,这里还有两种方法。这两个都比 慢一点merge_flatten_branches,但说明了一些有用的数组概念。(在其他比 php 更函数式的语言中,这些可能是首选。)
function merge_flatten_branches_reduce($karray, $varray) {
//$karray has the key-leaves, and $varray has the value-leaves
$m1 = array_merge_recursive($karray, $varray);
return array_map('flatten_branches_reduce', $m1);
}
function merge_flatten_branches_add($karray, $varray) {
//$karray has the key-leaves, and $varray has the value-leaves
$m1 = array_merge_recursive($karray, $varray);
return array_map('flatten_branches_add', $m1);
}
// The functions below are callbacks for the two above.
function array_add($a1, $a2) {
return $a1+$a2;
}
function flatten_leaf($leaf) {
return array($leaf[0] => $leaf[1]);
}
function flatten_branches_add($branches) {
$leaves = array_map('flatten_leaf', ($branches));
$finalleaves = array();
foreach ($leaves as $leaf) {
$finalleaves += $leaf;
}
return $finalleaves;
}
function flatten_branches_reduce($branches) {
$l = array_map('flatten_leaf', ($branches));
return array_reduce($l, 'array_add', array());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |