перезаписать цикл php во время зацикливания, затем прервать? - PullRequest
0 голосов
/ 04 августа 2010

Мне было интересно, считается ли этот фрагмент кода допустимым:

$arr = array(123,456,789,123,456,789);
foreach($arr as $a) {
    $arr = $a;
    break;
}
//prints 123
echo $arr;

Он выполняется, но есть ли подводные камни, которые я должен знать, используя этот метод? <ч /> Обновление: вот актуальная проблема
У вас есть массив из запроса к базе данных (select * from table where code = $code)

Array
(
    [0] => Array
        (
            [id] => 1
            [code] => 1234567
            [member_id] => 7
        )

    [1] => Array
        (
            [id] => 5
            [code] => 1234567
            [member_id] => 
        )

    [2] => Array
        (
            [id] => 67
            [code] => 1234567
            [member_id] => 43
        )

)

все, что вас волнует, - это найти первую (если есть) строку с пустым member_id (это означает, что код не был востребован).

Так как же вы поступите так?

По мнению Феликса Клинга, использование переменной для хранения массива кодов, а затем перезапись ее нужной строкой - не лучшее решение, так что вы предлагаете.

Также бонусный кредит: Сколько разных 7-значных кодов вы можете сгенерировать, используя 32 символа (допускается дублирование символов)?

это 32 ^ 32 * 7 или ((((((32 ^ 32) ^ 32) ^ 32) ^ 32) ^ 32) ^ 32) ^ 32)?

Ответы [ 4 ]

2 голосов
/ 04 августа 2010

Как объяснили другие, нет причины повторно использовать переменную. Есть ли причина для этого? Почему бы не создать новый?

$resultId = 0;

foreach ($result as $row) {
   if ($row["member_id"] == "") {
      $resultId = $row["id"];
      break;
   }
}

Но вот главный вопрос - почему бы вам просто не сделать это в SQL? Вы уже создаете запрос SQL. Что не так с select * from table where code = $code and member_id = null?

Кстати, чтобы ответить на ваш другой вопрос: Количество перестановок с семью символами, каждый с 32 различными возможностями = 32 ^ 7.

1 голос
/ 04 августа 2010

Итак,

использование этого метода работает нормально, если вы используете копию массива.

Если вы передадите массив по ссылке foreach($code_info as &$code), вы получите Недопустимый аргумент для foreach () error.

0 голосов
/ 04 августа 2010
$empty_number=-1;
foreach($arr as $a=>$b)
{
  if($b['member_id']!='')
  {
    $empty_number=$a;
    break;
  }
}

Индекс для пустого числа сохраняется в переменной $ empty_number. Если строки с пустым тегом member_id нет, значение $ empty_number равно -1.

EDIT:

Для вашего бонусного вопроса максимум будет 32 ^ 7 = 34 359 738 368

0 голосов
/ 04 августа 2010

Это может сработать, но это определенно плохой стиль кодирования и усложняет понимание вашего кода. Потому что, если вы используете более значимые имена переменных, это больше не имеет смысла:

$scores = array(123,456,789,123,456,789);
foreach($scores as $score) {
    $scores = $score;
    break;
}
//prints 123
echo $scores;

В этом случае $scores предлагает содержать что-то вроде списка, а не одного элемента (или представьте, что вы используете $score_list ... еще хуже). И это не улучшится, если вы начнете давать имена переменных, которые соответствуют разным типам значений;)


Помните: не все, что возможно, должно быть сделано. Я бы определенно избежал этого.

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