如何在 Laravel 控制器中合并两个对象数组?

问题描述 投票:0回答:2

我有这些函数来调用数据集,这些数据集使用 DB 查询来获取 Data A 并使用 CURL 来获取 Data B

现在我设法显示输出,但不知何故数据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)合并为一组。

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

数据A

{#310 
  +"0": {#213 
    +"id": "1"
    +"name": "MIKE"
    +"acc_no": "AAA001"
    +"email": "[email protected]" 
  }
}

数据B

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

感谢有人能帮助我。谢谢。

php arrays laravel object merge
2个回答
2
投票

问题1: 不要只是将 sql 字符串与参数连接起来,它有 SQL 注入问题,如果你想将

DB::select
与参数一起使用,你可以这样做:

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

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

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

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


0
投票

试试这个:-

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

    print_r($result);
© www.soinside.com 2019 - 2024. All rights reserved.