как переписать это php выражение if без устарелой функции each? - PullRequest
0 голосов
/ 20 марта 2020

Как я могу переписать этот фрагмент сценария php, чтобы больше не использовать устаревшую функцию 'each' в операторе 'if'?

if (list($_basic_auth_realm, $_basic_auth_header) = each($_auth_creds))
{
     ...
}

Многие, спасибо в adv. для вас введите!

V.

[EDIT]. Это если заявление не в al oop. Это часть большего блока:

if (!empty($_basic_auth_header))
    {
    ....
    }
    else if (!empty($_basic_auth_realm) && isset($_auth_creds[$_basic_auth_realm]))
    {
    ....
    }
    else if (list($_basic_auth_realm, $_basic_auth_header) = each($_auth_creds))
    {
    ....
    }

$ _ basic_auth_realm, $ _basic_auth_header - это строки $ _auth_creds - это массив

Я не совсем понимаю, как работает этот оператор «если». Я только пытаюсь обновить скрипт, который возвращает предупреждения при выполнении. Он используется в качестве прокси php на моем NAS, как было написано Абдуллой Арифом: https://github.com/emersion/phproxy

1 Ответ

1 голос
/ 20 марта 2020

Используйте свою собственную переменную для отслеживания текущего индекса в массиве, а не в зависимости от внутреннего состояния массива.

$auth_creds_index = 0;
...
    else if (list($_basic_auth_realm, $_basic_auth_header) = $_auth_creds[$auth_creds_index++])

Каждое место, где вы в данный момент используете each($_auth_creds), должно использовать $_auth_creds[$auth_creds_index++], они получат последовательные элементы массива.

Если вы переназначаете переменную с новым массивом, вам нужно сбросить переменную обратно на 0.

Вы также можете определить оболочку класса для массива, который автоматизирует все это.

...