эквивалент each() для результатов mysql, имитирующий первый цикл foreach()

StackOverflow https://stackoverflow.com/questions/1290303

  •  18-09-2019
  •  | 
  •  

Вопрос

Я видел в коде, над которым я работаю, следующее:

foreach( $mysql_result as $row ) $site_id = $row->id;

$mysql_result - это, конечно, mysql_result , так что этот foreach эквивалентен a while( mysql_fetch_row())

Иногда известно, что результат выдает только одну строку, но в коде все еще есть "foreach", так что создает впечатление о том, что это цикл из многих рядов.

Я пробовал использовать each(), но для этого это не работает.

Я знаю, что мог бы использовать mysql_fetch_row(), но код должен быть независимым от БД, поэтому я не могу использовать функции, специфичные для БД.Есть ли что-то вроде each(), которое работает в этом случае так же, как первая итерация foreach() ?

PS:что я делаю в настоящее время для удобства чтения, так это превращаю предыдущий пример в этот:

foreach( $mysql_result as $row ) break;
$site_id = $row->id;

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

Это было полезно?

Решение

Я думаю, то, что ты хочешь, это вместо этого:

foreach( $mysql_result as $row ) $site_id = $row->id;

Только это:

$site_id = $mysql_result[0]->id;

Другие советы

PS:то, что я делаю в настоящее время для удобства чтения, - это превратить предыдущий пример в этот:

foreach( $mysql_result как $row ) разрыв;

Оберните это в функцию, чтобы было ясно, что она получает одну строку (и при этом остается независимой от базы данных)

function fetch_single_row($result) 
{
  foreach( $mysql_result as $row ) break;
  return $row;
}

Тогда ваш код выглядел бы следующим образом

$row = fetch_single_row($mysql_result);
$site_id = $row->id;

Теперь вам не придется задаваться вопросом обо всех странных перерывах foreach (..);инструкции по всему коду.

Если вам нужен только один результат, то вам не нужно выполнять цикл.

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$site_id = $row['id'];

Вы могли бы использовать цикл do

$i =0
do {
    $site_id = $mysql_result[$i++]->id;
} while ($i <= 0);

Это то, чего ты хочешь?

if ( 1 == count( $mysql_result ) )
{
  $row = current( $mysql_result );

  // could probably also do this unless the array isn't zero-indexed
  // $row = $mysql_result[0];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top