Возможно ли возвращение массивов из функций в php for-loop - PullRequest
0 голосов
/ 29 августа 2018

Первый цикл for должен получить $projSDE_1, который является идентификатором сотрудника, и это значение, которое изменяет каждый цикл цикла.

$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);

Далее 2-й цикл 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); Пока это результат, который я получаю - Результат .

Список имен, отображаемых вверху:

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

Мне нужно каждое имя для каждой строки. В нем перечислено 10 имен из функции и предполагается, что для 10 строк. Все помощь приветствуется

1 Ответ

0 голосов
/ 29 августа 2018

Вы пытаетесь исправить не ту проблему.

Судя по вашему коду, исходный список значений извлекается из реляционной базы данных. Последующие результаты также извлекаются из реляционной базы данных.

Одно это очень неправильно (если только речь не идет о двух отдельных экземплярах СУБД, которые не могут напрямую взаимодействовать). Правильный способ получить 2 набора данных - это использовать JOIN для данных.

Но это не единственный вой в вашем коде.

Повторное создание и выполнение оператора выбора в цикле - очень плохая практика. Это будет решено тем же подходом, что и первый вопрос выше. Однако в случае, когда эталонный набор данных не создается в одной и той же реляционной СУБД, существуют более эффективные способы решения проблемы. Я бы сделал предложение, но функции 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);
}

В качестве примечания вы используете порядок, в котором данные возвращаются в исходном запросе, в качестве средства индексации наборов результатов. Пока вы извлекаете одну строку каждый раз, данные будут совпадать - но ваш код может извлекать ноль, одну или несколько строк каждый раз - опять же, решение состоит в том, чтобы выполнить один запрос с объединением. Если вам необходимо выполнить запросы к отдельным источникам данных, индексируйте массив по атрибуту первичного ключа из исходного набора данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...