Использовать возврат из цикла

Я нахожу несколько тем об использовании return за цикл. Но сказать правду все было примерно одинаково. вставить данные в цикле в массив, а затем вернуть этот массив.

То, что я делаю, — это цикл в цикле, так что, может быть, это проблема, но как бы я ни старался, я не могу заставить ее работать.

public function getSolicData() {
foreach ($this->solicStringConvert() as $solic){
$success = false;
try{
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
$stmt_solic = $con->prepare( $sql );
$stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
$stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );
$stmt_solic->bindValue( "option_code", $solic, PDO::PARAM_STR );
$stmt_solic->execute();
$i= 0;
while ($row = $stmt_solic->fetch()){
//echo $row['description'];
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>&nbsp;"'.$row['description'].'"</li>';
echo $row['description'];
echo "<br>";
$this->values[] = $row['description'];
return $this->values;
}
}catch(PDOExeption $e){
echo $e->getMessage();
echo $con->errorInfo();
}

}
}

Код выглядит логично для меня, к сожалению, его вывод является пустым массивом. Другая часть кода должна быть в порядке, потому что если я использую echo вместо return Я получаю хороший выходной цикл. Также если я заменюreturn» с var_dump() все данные есть.

Есть ли шанс, что кто-нибудь может мне помочь с этим?

0

Решение

возвратные выходы getSolicData функция, так что вы только когда-либо делаете одну итерацию вашего цикла.

Просто поместите оператор возврата в конце:

public function getSolicData() {
$tempArray = $this->solicStringConvert();
foreach ($tempArray as $key => $solic){
$success = false;
try{
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
$stmt_solic = $con->prepare( $sql );
$stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
$stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );
$stmt_solic->bindValue( "option_code", $tempArray[$key], PDO::PARAM_STR );
$stmt_solic->execute();
$i= 0;
while ($row = $stmt_solic->fetch()){
//echo $row['description'];
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>&nbsp;"'.$row['description'].'"</li>';
echo $row['description'];
echo "<br>";
$this->values[] = $row['description'];
// NOT HERE
}
}catch(PDOExeption $e){
echo $e->getMessage();
echo $con->errorInfo();
}

}
return $this->values; //AT THE END
}

Также, bindValue принимает ссылку, поэтому вы не можете использовать переменную temporay, созданную в цикле foreach (она перезаписывается при каждой итерации, поэтому ее окончательное значение будет использоваться для всех запросов), вместо этого передайте фактический элемент массива

1

Другие решения

Я бы предложил переместить return $this->values; в конце метода, потому что, когда return оператор встречается возвращает текущее значение $this->values и больше ничего из этого метода не выполняется впоследствии.

0

По вопросам рекламы [email protected]