У меня проблема с элементом in_array
, который я использую в сценарии точки дартс.PHP in_array странное поведение
Краткое описание того, что пойдет не так. Я использую in_array для проверки повторного появления для того же игрока в одиночной игре дартс. если один игрок играет в несколько одиночных игр, только первый должен дать игроку очки для индивидуального рейтинга.
Как-то он делает это в обратном порядке (check linked image для справки (извините за неправильную краску):) желтый - текущий результат, зеленый - как это должно быть. средний 4 не считается, так как они двойные.
изображение: In array diagram http://149.210.139.155/~dfk/tmp/inarray/matchform_inarray_mess2.png
in_array
вложен в цикле в то время, так что я не понимаю, где такое поведение происходит из.
код in_array:
//calculate indiv points
//Player TeamA
if(!in_array($scoresheet[$f_locA][$m_id], $IndivTeamA)){
$scoreA = $scoresheet[$f_locA][$m_po] . "-" . $scoresheet[$f_locB][$m_po];
$IndivTeamA[$scoresheet[$f_locA][$m_id]][rowid] = $scoresheet[$f_locA] [$r_id];
$IndivTeamA[$scoresheet[$f_locA][$m_id]][points] = GetIndivScore($scoreA,$BestOf);
}
//Player TeamB
if(!in_array($scoresheet[$f_locB][$m_id], $IndivTeamB)){
$scoreB = $scoresheet[$f_locB][$m_po] . "-" . $scoresheet[$f_locA][$m_po];
$IndivTeamB[$scoresheet[$f_locB][$m_id]][rowid] = $scoresheet[$f_locB][$r_id];
$IndivTeamB[$scoresheet[$f_locB][$m_id]][points] = GetIndivScore($scoreB,$BestOf);
}
Если кто-то может пожалуйста, сообщите мне, что либо я сделал неправильно или почему это это поведение материала способ. Я не могу найти информацию об этом здесь или в Google. i allrady потерял 3 часа на этом.
Я бы не ожидал, что это будет возможно, поскольку цикл while генерирует каждую строку, начиная с строки 1, поэтому было бы невозможно (по моей логике по крайней мере), чтобы последняя строка была allready в массиве, когда php все еще нуждается в сгенерируйте его.
Заранее благодарим за ваши усилия, чтобы помочь мне и моим советам, если я совершу глупую ошибку.
EDIT: VAR_DUMP & добавлен идентификатор строки, чтобы изображение
Вы хотите, чтобы 'in_array' возвращал только первое значение игры? Как и в случае, если член команды появляется более одного раза, вы ничего не сказали 'in_array' о том, какое значение сохранить. Было бы полезно получить 'var_dump' вашего массива, а также проверить, что ваш оператор' if' фактически отрицается с помощью '!', Поэтому в отношении вашего вопроса я думаю, что мы хотим видеть, это оператор 'else', который соответствует к 'Если вы заявили. – Martin
Привет, Мартин, спасибо за ваш ответ. Я действительно хочу, чтобы только первая итерация игрового значения (points и row_id) сохранялась для каждого игрока. В операторах if нет никакого выражения. Ссылка «Весь соответствующий код» имеет код, вырезанный, где повторяются точки. Все остальные коды есть. Если пользователь не находится в массиве allready, он получает оценку для игрока TeamA & TeamB с этой ноги, отправляет его в funcion, который возвращает очки за этот счет. Поэтому, если пользователь уже находится в массиве, ничего не происходит. Вот почему я не понимаю, как последнее значение попадает в массив. –