PHP - array_combine 还是 array_merge?

3
我确信对于 php 熟练的人来说,这很容易,但我错误地超载了自己的大脑,现在我真的不知道是否应该使用 array_combine、array_merge 还是其他什么方法......我已经谷歌和阅读了 4 小时的 php.net,但我觉得自己越来越困惑了...
本质上,我只想将一个数组合并而保留其键?
//Here are the original arrays
[field_sreference] => Array
    (
        [0] => Array
            (
                [nid] => 28
            )

        [1] => Array
            (
                [nid] => 28
            )

        [2] => Array
            (
                [nid] => 29
            )
    )

[field_idelta] => Array
    (
        [0] => Array
            (
                [value] => 0
            )

        [1] => Array
            (
                [value] => 1
            )

        [2] => Array
            (
                [value] => 0
            )
    )

[field_iswitch] => Array
    (
        [0] => Array
            (
                [value] => 0
            )

        [1] => Array
            (
                [value] => 0
            )

        [2] => Array
            (
                [value] => 0
            )
    )

//Here is what I'm trying to achieve:

[combinedarray] => Array
        (
            [0] => Array
                (
                    [nid] => 28
                    [idelta] => 0
                    [iswitch] => 0

                )

            [1] => Array
                (
                    [nid] => 28
                    [idelta] => 1
                    [iswitch] => 0
                )

            [2] => Array
                (
                    [nid] => 29
                    [idelta] => 0
                    [iswitch] => 0
                )
        )

4
发布数组结构($arr = array('field_s...))可以使人们更轻松地帮助您。 - kba
你试过它们吗?结果如何? - DampeS8N
2
array_combine 函数使用一个数组作为键,另一个数组作为值来创建一个新的数组,但这对你没有帮助。 - gen_Eric
2个回答

3
您可以通过简单地迭代数组来以O(n)的时间复杂度解决此问题...
$combinedarray = array();
$len = count($field_sreference);
for ($i = 0; $i < $len; $i++) {
    $combinedarray[] = array("nid" => $field_sreference[$i]['nid'], 
                             "idelta" => $filed_idelta[$i]['value'], 
                             "iswitch" => $field_iswitch[$i]['value']);
}

这里假设这三个数组的长度都相等。

0

打得有点快,但应该可以工作:

$result = array();
foreach ($arrays as $array)
{
    foreach ($array as $index => $data)
    {
        $result[$index] += $data;        
    }
}

由于您没有以某种简单的形式提供一些输入数组,因此您需要自行测试它。假设这是伪代码,我将其留在此处作为练习。+运算符是数组联合运算符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接