【问题标题】:php - array_combine or array_merge?php - array_combine 还是 array_merge?
【发布时间】:2012-04-16 19:19:53
【问题描述】:

我确信这对于精通 php 的人来说很容易,但我犯了一个让我的大脑超负荷的错误,所以现在我真的很困惑是否应该使用 array_combine、array_merge 或其他东西...我已经用谷歌搜索和阅读 php.net 4 小时了,我想我只是让自己更加困惑...

本质上,我只是想在保留键的同时组合一个数组?

//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
                )
        )

【问题讨论】:

  • 发布数组构造($arr = array('field_s...) 可以让人们更轻松地帮助您。
  • 你试过了吗?结果如何?
  • array_combine 使用一个数组作为键,另一个作为值来创建一个数组,这对您没有帮助。

标签: php array-merge


【解决方案1】:

你可以通过简单地迭代数组来解决这个 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']);
}

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

【讨论】:

    【解决方案2】:

    打字有点快,但这应该可以:

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

    由于您没有以某种简单的形式提供一些输入数组,您需要自己测试它。假设它是伪代码,我把它留在这里作为练习。 + 运算符是array union operator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多