Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Что делает данный PHP код?

#php


Только начинаю изучать PHP. Вопрос: Почему условие срабатывает и код выводит строки
$value1 и $value2. Если $value == 0 то вывести все $value, но там же нет 0. Почему
он выводит их?

$items = [
    'key1' => 'value1',
    'key2' => 'value2',
];

foreach($items as $key => $value) {
    if((int)$value == 0) {
        echo $value;
    }
}

    


Ответы

Ответ 1



// Думаю с массивом все понятно $items = [ 'key1' => 'value1', 'key2' => 'value2', ]; foreach($items as $key => $value) { // Пробегаемся по нашему массиву // Будет 2 иттерации, где: // 1) $key = key1; $value = value1 // 2) $key = key2; $value = value2 if((int)$value == 0) { // Приводим строку к int и сравниваем результат с 0 echo $value; // Если верно, то выводим $value } } Теперь по поводу (int)$value, $value - у вас строка, вы пытаетесь строку переделать в числовой тип. если у вас там символы, то в числа их перевести не получится, выдается 0, примеры: var_dump((int)'text'); // 0 var_dump((int)'123'); // 123 var_dump((int)'5.15'); // 5 Однако var_dump((int)'8text'); // 8 И документация: http://php.net/manual/ru/language.types.type-juggling.php Конкретно нас интересует: http://php.net/manual/ru/language.types.string.php#language.types.string.conversion Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами. и там ниже примеры.

Ответ 2



Из-за преобразования (int). Поскольку текстовое значение value... не является числом, то приведение к целому возвращает 0

Комментариев нет:

Отправить комментарий