如何调用foreach导致另一个函数?

时间:2016-07-19 13:23:33

标签: php arrays laravel

我有一个控制器文件,在这个页面中有两个功能。我在testtwo函数中需要testone功能。所以我在testtwo()中调用了testone(),但是出现了错误" Array to string conversion error"

当我print_r($ title)时,结果列在页面上//数组([0] => Turbo [1] => Turboboost [2] => Monoboost)。

Customercontoller.php

public function testone($id)
    {
        $title = array();
        $hardwares = Hardware::select('hardwares.title')
            ->join('vehicle_hardwares', 'hardwares.id', '=', 'vehicle_hardwares.hardware_id')
            ->where('vehicle_hardwares.vehicle_id', $id)
            ->where('hardwares.status', 'online')
            ->get();
        foreach ($hardwares as $hardware){
            $title[] = $hardware->title;
        }
        return $title;
        //print_r($title); //Array ( [0] => Turbo [1] => Turboboost [2] => Monoboost )
    }



protected function testtwo($customer_id)
 {
  $vehicleList ='';
  $vehicle_id  = 1;
  $vehicleList .=' <p>Details: '.$this->testone($vehicle_id).'</p><br>'
  return $vehicleList;
 }

4 个答案:

答案 0 :(得分:1)

您的testone函数返回一个字符串数组,您需要在testtwo函数中迭代该数组。

答案 1 :(得分:1)

此行返回数组

$this->testone($vehicle_id)

所以在连接期间

$vehicleList .=' <p>Details: '.$this->testone($vehicle_id).'</p><br>'

PHP内部尝试将数组转换为无法执行的字符串,因此最终会出现array to string conversion错误。

如果您使用的是PHP7.0,则可以使用以下语法来解构PHP数组。

$vehicleList .=' <p>Details: '.$this->testone()[$vehicle_id].'</p><br>' 

答案 2 :(得分:0)

$title是数组不是字符串。你不能连接字符串与数组

您需要从testone函数

返回字符串
$title = "";
foreach ($hardwares as $hardware) {
    $title .= "<p>Details: " . $hardware->title . "</p><br>";
}
return $title;// return string

testtwo作为

进入
$vehicleList .=$this->testone($vehicle_id);
return $vehicleList;

答案 3 :(得分:0)

这是一个数组

return $title;

你在这里用它作为字符串

$vehicleList .=' <p>Details: '.$this->testone($vehicle_id).'</p><br>'

这就是您遇到此错误的原因。您需要从testone()

返回字符串