【问题标题】:How to merge object array with normal array in php?如何在php中将对象数组与普通数组合并?
【发布时间】:2017-02-24 08:36:44
【问题描述】:

我有两个数组,如下所示:

数组 1:

array([0]=> 11, [1] => 2.5)

数组2:

Array ( 
    [0] => stdClass Object ( 
        [type] => 1 
        [creator_id] => 3 
        [creator_name] => E1 
        [per_tar] => 300 
        [pro_tar] => 200 
        [ac] => 300 
        [PA] => 17 
        [Q1] => 800 
    ) 
    [1] => stdClass Object ( 
        [type] => 1 
        [creator_id] => 4 
        [creator_name] => E2 
        [per_tar] => 100 
        [pro_tar] => 170 
        [ac] => 0 
        [PA] => 7 
        [Q1] => 270 
    ) 
) 

我想要的是我想通过以下方式将数组 1 与数组 2 合并

数组 1 键 [0] 被合并到数组 2 键 [0] 对象中,所有键都相同。

所以我的预期输出是:

Array ( 
    [0] => stdClass Object ( 
        [type] => 1 
        [creator_id] => 3 
        [creator_name] => E1 
        [per_tar] => 300 
        [pro_tar] => 200 
        [ac] => 300 
        [PA] => 17 
        [Q1] => 800
        [new] => 11 
    ) 
    [1] => stdClass Object ( 
        [type] => 1 
        [creator_id] => 4 
        [creator_name] => E2 
        [per_tar] => 100 
        [pro_tar] => 170 
        [ac] => 0 
        [PA] => 7 
        [Q1] => 270
        [new] => 2.5 
    ) 
) 

我正在尝试 array_merge() 函数,但它只合并两个数组。请帮帮我

【问题讨论】:

  • 我收到这个错误 array_merge(): Argument #1 is not an array
  • 你能举个例子吗
  • array-object 有方法toArray()。如果您将 ArrayObjects 嵌套在 ArrayObject 中,恐怕这将不起作用,因为 toArray() 不会递归。您需要使用自定义方法来解决此问题。

标签: php arrays multidimensional-array array-merge


【解决方案1】:
$res = [];
foreach($array1 as $key => $val){
    // before merging convert object to array
    $arr = is_object($array2[$key]) ? (array)$array2[$key] : $array2[$key];  
    $res[$key] = array_merge($array1[$key], $arr);
}

print_r($res);

【讨论】:

    【解决方案2】:

    您应该迭代$array1 项目并将每个项目的值插入到$array2 的相关索引中。

    foreach ($array1 as $key=>$value){
        $array2[$key]->new = $value;
    }
    

    查看demo中的结果

    另外,如果您想保留array2,请将其值复制到新变量中,例如$newArray

    $newArray = $array2;
    foreach ($array1 as $key=>$value){
        $newArray[$key]->new = $value;
    }
    

    【讨论】:

    • 我有一个疑问。如果我的数组 2 有 1 个键意味着我正在从空值创建默认对象错误如何解决这个问题
    • @Nisanth 您应该检查$array2 中是否存在目标索引,然后在其中设置新属性。见3v4l.org/GPRPV
    【解决方案3】:

    最好的办法是将 stdClass 对象转换为数组,然后使用 array_merge。

    将 stdClass 对象转换为数组,如下所示:

    $array = json_decode(json_encode($object), true);
    

    【讨论】:

    • $array = (array) $object; 有什么问题
    猜你喜欢
    • 1970-01-01
    • 2015-08-20
    • 2012-05-28
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2019-09-27
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多