#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
Комментариев нет:
Отправить комментарий