【问题标题】:How to merge two arrays of objects in Laravel controller?如何在 Laravel 控制器中合并两个对象数组?
【发布时间】:2020-06-01 01:15:49
【问题描述】:

我有这些函数来调用对 Data A 使用 DB 查询和 Data B 使用 CURL 的数据集。

现在我设法显示输出,但不知何故,数据 A 无法合并到数据 B。我的代码如下。

命名空间:

use \stdClass;

代码:

public function find($user = null) {
    if($user)
    {
        // Data A
        $sql            = "SELECT * FROM TABLE WHERE ID = '".$user."' "; 
        $arr            = DB::connection('mysql')->select($sql);
        $resultData     = new \stdClass();

        foreach ($arr as $key => $value) 
        {
            $resultData->$key = $value; // Extract Data A table
        }


        // Data B
        $url    = "http://localhost/data/curl.php?value=".$user; 
        $ch     = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL,$url);
        $result = curl_exec($ch);
        curl_close($ch);
        $row    = json_decode($result, true); 

        foreach ($row as $key => $value) 
        {
            $resultData->$key = $value; // Extract Data B 
        }  

        dd($resultData);
        return true;
    }
    return false;
}

我的目标是将这两组数据(A 和 B)合并为一个。

如果我单独显示输出,我现在在浏览器中得到的结果是这样的。当我合并它时,它只显示 Data B :

数据 A

{#310 
  +"0": {#213 
    +"id": "1"
    +"name": "MIKE"
    +"acc_no": "AAA001"
    +"email": "mike@col.com" 
  }
}

数据 B

{#310 
  +"0": "CLERK"
  +"TITLE": "CLERK"
  +"1": "Clerk, IT Department"
  +"POSITION": "Clerk, IT Department"
  +"2": "Rozaimi Bin Zamahri"
  +"SECTION": "Office"
}

如果有人可以帮助我,不胜感激。谢谢。

【问题讨论】:

  • 您可以使用 + 合并 2 个数组,保持相同的数字键。例如 $dataC = $dataA+ $dataB
  • 使用$resultData 而不是$adServer
  • @TsaiKoga 代码已更新。对不起。

标签: arrays laravel object merge controller


【解决方案1】:

问题1: 不要只是将sql字符串与params连接起来,它有SQL注入问题,如果你想使用DB::select和params,你可以这样做:

$sql  = "SELECT * FROM TABLE WHERE ID = ? "; 
$arr  = DB::connection('mysql')->select($sql, [$user]);

问题2: 因为您使用的是 DB select 方法,所以它将返回一个包含对象的数组嵌套。您需要先获取对象,请执行以下操作:

$arr = DB::connection('mysql')->select($sql)[0];

然后你可以通过循环合并它们,或者将它们转换为数组并合并它们。

【讨论】:

  • 注明。非常感谢:)
【解决方案2】:

试试这个:-

    $data1=(object)['a','b'];
    $data2=(object)['c','d'];
    $result = (object) array_merge(
        (array) $data1, (array) $data2);

    print_r($result);

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2012-08-06
    • 2019-09-26
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多