эквивалент each() для результатов mysql, имитирующий первый цикл foreach()
Вопрос
Я видел в коде, над которым я работаю, следующее:
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];
}