Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP组合了两个多维数组_Php_Arrays_Multidimensional Array - Fatal编程技术网

PHP组合了两个多维数组

PHP组合了两个多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我试图使用array_combine来组合两个多维数组,但不知何故没有正确执行 以下是第1列: Array( [Nov 18, 2011] => Array( [C] => 107705.5792 [I] => 44561.52 ) [Nov 22, 2011] => Array( [C] => -8992.8352 ) ) 这里是array2: Array( [Nov 18,

我试图使用array_combine来组合两个多维数组,但不知何故没有正确执行

以下是第1列:

Array(
    [Nov 18, 2011] => Array(
        [C] => 107705.5792
        [I] => 44561.52
    )
    [Nov 22, 2011] => Array(
        [C] => -8992.8352
    )
)
这里是array2:

Array(
    [Nov 18, 2011] => Array(
        [C] => 3
        [I] => 1
    )
    [Nov 22, 2011] => Array(
        [C] => 2
    )
)
以下是我尝试的array_combine,它不起作用:

$array1 = ($arr1);
$array2 = ($arr2);
$result = array_combine($arr1, $arr2);
echo '<pre>';
print_r($result);
echo '</pre>';
谢谢你的帮助

  • 编辑-
我发现如果我改用array\u merge\u recursive,这就是我得到的结果。不是我要找的,但很接近:

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>';
  • 进一步编辑-
以下是我尝试实施以下建议之一的方法,但这对我不起作用。怎么了

function cust_array_merge(array $array1, array $array2)
{
    $merged = array();
    // 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 = $array1;
        }
    }
    return $merged;
}
函数cust\u array\u merge(数组和$array1,数组$array2){
//循环通过主阵列
foreach($array1作为$key=>$val){
//检查$array2是否具有相同的索引
如果(数组\键\存在($key,$array2)){
//将$array1的索引重置为$array2的值
foreach($array2[$key]作为$subKey=>$subVal){
如果(array_key_存在($subKey,$array1[$key])){
$tempVal=$array1[$key][$subKey];
未设置($array1[$key][$subKey]);
$array1[$key][$subVal]=$tempVal;}
$merged=cust\u array\u merge($arr\u cats\u per\u bill\u date,$arr\u cvat);
回声';
打印(合并);
回声';

您要查找的结果对我来说非常定制。也就是说,我不知道有任何内置PHP数组函数可以做到这一点。但是,我确实为您编写了一个自定义函数警告:它非常适合这种场合,因此可能不太可重复使用


array\u merge\u recursive
非常接近您(您的“键”位于叶数组的索引1中,您的值位于索引0中)。因此,分两步操作:首先获得合并的数组,然后摆弄分支以获得正确的结果

为了好玩,这里还有两种方法。这两个分支都比
merge\u flatten\u分支稍慢,但说明了一些有用的数组概念。(在其他比php更具功能性的语言中,这些可能是首选。)


您是想保留关键引用,还是不在乎它是否变为0 1 2?数组中不能有两个键“C”或“I”或任何其他值。为什么所有问题的内容和数组都完全相同?我们是在为你做家庭作业还是为学校做些什么?这是我在过去一两周里看到的你的第三个或第四个问题,与前一个问题几乎完全相同。@phpmeh,不,我不想保留关键的参考资料。@mmmshuddup,我的问题有相同的内容和数组,因为我仍在试图找出相同的事实情况。这不是学校的家庭作业。我只是想学习如何正确使用多维数组。明白了。只是要确保它在任何方面都不是假的,哈哈。谢谢你澄清这一点!谢谢你的回答,但我在实施上遇到了困难。我编辑了我的问题,向大家展示了我迄今为止所做的尝试。你能看到我做错了什么吗?
cust\u array\u merge
函数实际上没有返回任何内容。它接受的第一个参数(
$array1
)是通过引用的(因此是
&
)。我更改了它,以便它现在返回合并的数组。查看我编辑的函数,这应该对你有用。非常感谢@mmmshuddup。我得到了你的工作解决方案,在这个过程中,我学到了一两件事。你为我这么做太酷了。让我一天都很愉快干杯。我注意到您的结果将数字四舍五入到最接近的整数,而不是保持小数精度。不要担心修正它,因为发布的另一个答案也可以工作,并保持小数精度。这非常酷。你的解决方案恰到好处。这正是我想要的结果。现在我只需要想一想这是怎么做到的。非常感谢。你知道这是怎么做的吗?一、 另一方面,我只是想理解术语到底是什么意思。所有那些压扁叶子的东西都是相当深奥的。神秘的函数名…不酷。如果这是一场聪明但毫无意义的函数名竞赛,
merge\u flant\u branchs\u reduce
将以优异的成绩获胜。不过,对于有效的解决方案,+1。
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>';
function cust_array_merge(array $array1, array $array2)
{
    $merged = array();
    // 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 = $array1;
        }
    }
    return $merged;
}
// 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);
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());
}