是否有可能从PHP for循环中的函数返回数组

时间:2018-08-29 10:05:30

标签: php arrays function

第一个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显示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

顶部显示的姓名列表是

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

我需要为每行输入每个名称。它列出了函数中的10个名称,并假定有10行。感谢所有帮助

1 个答案:

答案 0 :(得分:0)

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

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

仅此一项是非常错误的(除非我们正在谈论无法直接通信的2个单独的DBMS实例)。检索2组数据的正确方法是对数据使用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);
}

作为旁注,您将使用顺序查询中返回数据的顺序作为对结果集建立索引的方式。只要您每次检索一行,数据就会匹配-但您的代码每次可能检索零行,一次或多于一行-同样,解决方案是使用联接运行一个查询。如果您需要针对过分的数据源运行查询,请使用原始数据集中的主键属性为数组建立索引。