У меня есть следующий объект:
stdClass Object ( [0] => stdClass Object ( [img_id] => 56 [img_name] => 5c9eeb51930ebe222ab26895dab7c348.png ) )
Он сбрасывается в переменную с именем $ image_names. Я пытаюсь получить запись для [0].
Я пытался:
$ image_names-> 0, но я получаю ошибку: синтаксическая ошибка, неожиданный T_LNUMBER
Я даже пробовал $ image_names [0]. Я понимаю, что это не должно работать, но я думал, что попробую. Это не возвращает ошибку. Но он также не возвращает данные.
В этой структуре объектов, как мне получить объект, связанный с ключом [0]?
Как сообщить phpmyadmin, MySQL, чтобы разрешить первое 0 перед номером телефона, например? (Не заполнение нуля)
Есть обходной путь или что-то еще?
У меня есть страница, где вы регистрируете свою собаку, и я хочу, чтобы все эти поля были необходимы:
$required_fields = array('name', 'age', 'gender', 'breed', 'size'); foreach ($_POST as $key => $value) { if (empty($value) && in_array($key, $required_fields) === true) { $errors[] = 'All fields marked with * are required.'; break 1; } }
Проблема в том, что если кто-то входит 0 (что я им инструктирую делать, если собака щенок), представление, похоже, читает это поле как пустое (давая мне эту ошибку). У меня есть проверки дальше, удаляя любые целые числа и т. Д., Но лучшее решение и самая простая форма для пользователей, которые я по-прежнему думаю, – это возможность ввода 0 в качестве значения. Во всяком случае, есть ли способ заставить мой PHP-код считать значение не равным нулю?
Из руководства :
Следующие вещи считаются пустыми:
"" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) $var; (a variable declared, but without a value)
Исправить, что вы можете подумать, было бы так:
if ((empty($value) && $value != 0) && in_array($key, $required_fields) === true) {
PHP рассматривает их как пустые:
null 0 "" "0" false
Таким образом, у вас есть два варианта. Приложите что-нибудь к нему, например значение a0
или, используйте isset
.
Проверить $value === null
if ($value === null && in_array($key, $required_fields) === true) {
Я смотрю на функцию trim
но, к сожалению, не удаляет «0», как я могу добавить к ней это? Должен ли я использовать str_replace
?
EDIT: Строка, которую я хотел изменить, – это номер сообщения, который выглядит так: 00023460
Функция ltrim("00023460", "0")
делает именно то, что мне нужно 🙂 Очевидно, я бы не хотел использовать обычную trim
потому что она также удалит окончание 0, но поскольку я забыл добавить, что ответ, который я получил, 🙂
$ php -r 'echo trim("0string0", "0") . "\n";' string
Для нулевого заполненного номера в примере:
$ php -r 'echo ltrim("00023460", "0") . "\n";' 23460
Функция trim только удаляет символы из начала и конца строки, поэтому вам, вероятно, потребуется использовать str_replace.
Если вам нужно удалить только 0 из начала и конца строки, вы можете использовать следующее:
$str = '0000hello00'; $clean_string = trim($str, '0'); // 'hello'
Это должно было быть здесь с самого начала.
EDIT: Строка, которую я хотел изменить, – это номер сообщения, который выглядит так: 00023460
Лучшее решение, вероятно, это для любого целого числа ниже, чем PHP_INT_MAX
$ number = (int) '00023460';
Взгляните на str_replace
print str_replace( '0', '', "This0string0needs0spaces");
Конечно, это так (см. Второй параметр $charlist
):
trim('000foo0bar000', '0') // 'foo0bar'
Извините, может быть, немой вопрос, но у меня проблема HUGE с одним случаем, когда у меня есть переменная int со значением 0 (ноль).
switch ($starost_vozila){ case (0): switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 485; break; case ("motor2"): $eko_taksa = 243; break; case ("motor3"): $eko_taksa = 121; break; case ("motor4"): $eko_taksa = 194; break; } break; case ($starost_vozila < 6): switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 485; break; case ("motor2"): $eko_taksa = 243; break; case ("motor3"): $eko_taksa = 121; break; case ("motor4"): $eko_taksa = 194; break; } break; case ($starost_vozila > 5 && $starost_vozila < 11): switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 667; break; case ("motor2"): $eko_taksa = 273; break; case ("motor3"): $eko_taksa = 136; break; case ("motor4"): $eko_taksa = 218; break; } break;
Switch продолжить больше, но вот моя проблема, в этом фрагменте кода.
Если я не помещаю «case (0):» и использую это:
case ($starost_vozila >= 0 && $starost_vozila < 6):
Тогда случай, который будет следующим, каким-то образом станет активным, и он распечатает «$ eko_taksa = 667;».
Это все проблема, когда «$ starost_vozila = 0», но когда это число меньше 6, чем этот случай выше работает.
Каждый var здесь int. Все работает нормально, за исключением случаев, когда «$ starost_vozila = 0», и когда я использую «case» ($ starost_vozila> = 0 && $ starost_vozila <6): ".
Я понятия не имею, что происходит … Oo
Извините, если это глупый вопрос. 🙁
в случаях с коммутаторами не принимаются утверждения, которые необходимо оценить. Они берут простые строки, булевы или числа, которые сравниваются с
так скажите, что у вас есть
$x = 0 switch( $x ) { case( $x < 10 ): ... break; }
вы ожидаете, что это произойдет, но это не так, и вот почему
( $x < 10 )
оценивается как true
так что на самом деле у вас есть:
$x = 0 switch( $x ) { case true: //!!! ... break; }
0 != true
поэтому случай не выполняется
вам нужно использовать
if() { } else if() { } else { }
Вы используете switch
неправильно.
Ваш код понимается так:
if ($starost_vozila == 0) { switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 485; break; case ("motor2"): $eko_taksa = 243; break; case ("motor3"): $eko_taksa = 121; break; case ("motor4"): $eko_taksa = 194; break; } } else if ($starost_vozila == ($starost_vozila < 6)) { //not what you want!!! switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 485; break; case ("motor2"): $eko_taksa = 243; break; case ("motor3"): $eko_taksa = 121; break; case ("motor4"): $eko_taksa = 194; break; } } else if ($starost_vozila == ($starost_vozila > 5 && $starost_vozila < 11)) { //not what you want!!! switch ($podaci['tip_motora']){ case ("motor1"): $eko_taksa = 667; break; case ("motor2"): $eko_taksa = 273; break; case ("motor3"): $eko_taksa = 136; break; case ("motor4"): $eko_taksa = 218; break; } }
Например, ($starost_vozila < 6)
станет либо TRUE
либо FALSE
. $starost_vozila == ($starost_vozila < 6)
сравнивает $starost_vozila
с TRUE
или FALSE
, что вы не хотите делать.
Я предлагаю использовать if
/ elseif
вместо switch
в этом случае. Например:
if ($starost_vozila == 0) { ... } else if ($starost_vozila < 6) { ... } else if ($starost_vozila > 5 && $starost_vozila < 11) { ... }
использование Switch аналогично == в «if statement», а не === (не проверяет тип). Только пустая строка или NULL приведет к Integer 0 – кроме этого, они считаются строкой 0.
У меня есть функция
$x = 012; echo $x / 3;
Почему результат 3,33333?
Но если я использую:
$x = '012';
Тогда правильно. Вопрос в том, как это можно объяснить?
Числа с префиксом 0 обрабатываются как восьмеричные числа:
$x = 012;//$x is 10
Подробнее здесь
Причина, что $x = '012';
работает, потому что PHP преобразует это в целое число, не рассматривая его как восьмеричное число.
Числа с нулем – это восьмеричные числа. Итак, 012 – восьмеричное число.
Из руководства по PHP :
$a = 0123; // octal number (equivalent to 83 decimal)