【问题标题】:Is it possible returning arrays from functions in php for-loop是否可以从 php for-loop 中的函数返回数组
【发布时间】:2025-12-22 09:25:14
【问题描述】:

第一个 for 循环是检索 $projSDE_1,它是员工 ID,它是每个循环轮次都会更改的值。

$projSDE_1_IDs = [];
for($i=0; $i<db_rowcount();$i++)//1st for
{
$projSDE_1=db_get($i,8);
array_push($projSDE_1_IDs,$projSDE_1);
}
$projSDE_1_names = func_GetEmpNameNew($projSDE_1_IDs,$projSDE_1);

接下来,第二个 for 循环将检索所有数据并显示它。我所需要的只是每一行都能够显示 $projSDE_1_names by func_GetEmpNameNew($projSDE_1_IDs,$projSDE_1);

for($j=0; $j<db_rowcount();$j++)//2nd for
{
<tr >
<tbody>
<td style='width:5%'>".$no.".&nbsp;</a></td>
<td>".$projID."&nbsp;</td>
<td>".$projClient."&nbsp;</td>";
<td>".$projSDE_1_names."&nbsp;</td>";
</tbody>
</tr>
}//endfor

获取$projSDE_1_names的函数

function func_GetEmpNameNew($empIDs) {

$names = [];
 foreach($empIDs as $empID){

  $sqlEmp="select EmpID,LastName2_c from empbasic WHERE EmpID= '".$empID."'";

    db_select($sqlEmp);

    $rowcount=db_rowcount();

    if(db_rowcount()>0){

        for($f=0;$f<count($empIDs);$f++){
            $empID=db_get($f,0);
            $empName=db_get($f,1);
            array_push($names, $empName);

        }//for
    }//if

       }//foreach

return $names;

 } // function

 var_dump($projSDE_1_names); // Display the array to see if you get all the correct data.

该函数工作正常,它能够返回一个包含员工姓名的数组..var_dump($projSDE_1_names); 到目前为止,这是我得到的结果 - Result

顶部显示的名字列表是by

   foreach ($projSDE_1_names as $projSDE_1_name) {
   echo $projSDE_1_name.'-';
    } 

我需要每行的每个名称。它列出了函数中的 10 个名称及其假设为 10 行。感谢所有帮助

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    您正在尝试解决错误的问题。

    从您的代码来看,初始值列表是从关系数据库中检索的。随后的结果也从关系数据库中检索。

    仅此一项是非常错误的(除非我们谈论的是无法直接通信的 2 个独立的 DBMS 实例)。检索这两组数据的正确方法是对数据使用 JOIN。

    但这不是你代码中唯一的咆哮。

    在循环中重复生成和执行 select 语句是非常糟糕的做法。这将通过与上述第一个问题相同的方法来解决。但是,如果参考数据集不是源自相同的关系 DBMS,则有更好的方法来解决该问题。我会提出一个建议,但您代码中的 db_ 函数不是标准的 PHP 函数。您的代码中暴露的行为似乎是一个非常繁琐和限制性的接口。使用 mysqli 你可以简单地....

    function func_GetEmpNameNew($empIDs) {
      global $db_handle;
      $sqlEmp="select EmpID,LastName2_c from empbasic WHERE EmpID IN ("
           . implode(",", $empID) // assuming the inputs are trusted and integer values
           ")";
      $res=mysqli_query($db_handle, $sqlEmp);
      return mysqli_fetch_all($res, MYSQLI_ASSOC);
    }
    

    作为旁注,您正在使用原始查询中返回数据的顺序作为索引结果集的一种方式。只要您每次都检索一行,数据就会匹配——但您的代码每次可能检索零、一行或多行——同样,解决方案是运行一个带有连接的查询。如果您需要针对不同的数据源运行查询,请通过原始数据集中的主键属性对数组进行索引。

    【讨论】: