如何在return语句中编写循环?

时间:2019-02-11 06:47:33

标签: php

我需要得到这个结果

return [
    [$row_0['Наименование'], $row_0['Ассортимент'], $row_0['Сумма']],
    [$row_1['Наименование'], $row_1['Ассортимент'], $row_1['Сумма']],
    [$row_2['Наименование'], $row_2['Ассортимент'], $row_2['Сумма']],
];

通过使用此循环来解析数据库数据

for ($i = 0; $i < $num_rows; $i++) {
    $row = $adb->query_result_rowdata($accountQuery, $i);
    [$row['Наименование'], $row['Ассортимент'], $row['Сумма']],
}

此代码有语法错误

return [
    for ($i = 0; $i < $num_rows; $i++) {
        $row = $adb->query_result_rowdata($accountQuery, $i);
        [$row['Наименование'], $row['Ассортимент'], $row['Сумма']],
    }
];

如何编写循环以在return语句中获得上述结果?

3 个答案:

答案 0 :(得分:5)

return语句中不能有控制结构。

首先遍历数据,将其附加到数组,然后返回。

$result = array();
for ($i = 0; $i < $num_rows; $i++) {
    $row = $adb->query_result_rowdata($accountQuery, $i);
    $result[] = [$row['Наименование'], $row['Ассортимент'], $row['Сумма']];
}
return $result;

答案 1 :(得分:1)

如果您真的真的需要完整的结果数组,那么其他人已经提供了您想要的答案。

如果您只想遍历数组一次,则使用yield keyword(生成器语法)可能会为您提供另一个易于阅读的解决方案:

for ($i = 0; $i < $num_rows; $i++) {
    $row = $adb->query_result_rowdata($accountQuery, $i);
    yield [$row['Наименование'], $row['Ассортимент'], $row['Сумма']];
}

请注意与您发布的第二段代码相似。

如果调用$adb->query_result_rowdata(...)需要打开数据库连接(或其他一些可关闭的资源),则只有在您决定不再迭代生成的生成器时,才能关闭该连接。关闭连接后,从生成器中检索新值将返回错误。

答案 2 :(得分:0)

只需在return语句和return数组之前做所有事情,像这样:

$result = [];
for ($i = 0; $i < $num_rows; $i++) {
    $row = $adb->query_result_rowdata($accountQuery, $i);
    $result[] = [$row['Наименование'], $row['Ассортимент'], $row['Сумма']];
}
return $result;