2016-07-19 4 views
-1

У меня есть файл контроллера, на этой странице есть две функции. Мне нужна функция testone в функции testtwo. Поэтому я вызвал testone() внутри testtwo(), но получил ошибку «Array to string conversion error»Как вызвать foreach результат в другую функцию?

Когда я печатаю_r ($ title), результат выводится на странице // Массив ([0] => Турбо [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; 
} 
+1

'$ this-> testone ($ vehicle_id)' возвращает '$ title', который представляет собой массив! –

ответ

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; 
+0

Огромное вам спасибо. –

+0

Ты рад! – Saty

1

Ваш testone функция возвращает массив строк, вам нужно перебирать массив в вашей testtwo функции.

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>' 
0

Это массив

return $title; 

И вы используете его как строку здесь

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

Вот почему вы испытываете эту ошибку. Вам нужно вернуть строку из testone()

Смежные вопросы