[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объяснитепоследовательность работы if
Страницы: 1, 2
Xes
Объясните как работает if в частности чтоб стало понятно почему не прокатывает условие.
				if($fotoname = json_decode($sqlrow['fotoname']) && is_array($fotoname)){

Неизвестный идентификатор $fotoname
Invis1ble
if - управляющая конструкция. Код, находящийся в блоке if, выполняется в случае, если выражение в круглых скобках интерпретируется как true.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Renden
Xes
в if только условия, 1 знак '=' это присвоение.

if($fotoname == json_decode($sqlrow['fotoname']) && !is_array($fotoname)){
Invis1ble
С присваиванием условие является тоже вполне адекватным, так что не путай людей.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Xes
ясно
$fotoname = json_decode($sqlrow['fotoname']) тобишь надо раценивать как это выполнить если json_decode($sqlrow['fotoname']) истина и is_array($fotoname) истина.
А не если json_decode($sqlrow['fotoname']) истина присвоить $fotoname = json_decode($sqlrow['fotoname']) и проверить is_array($fotoname)
Invis1ble
Цитата
$fotoname = json_decode($sqlrow['fotoname']) тобишь надо раценивать как это выполнить если json_decode($sqlrow['fotoname']) истина и is_array($fotoname) истина.

почти
выполнить ф-цию json_decode() и присвоить результат $fotoname, если $fotoname истина и !is_array($fotoname) истина - выполнить if-блок

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Xes
Цитата (Invis1ble @ 3.10.2011 - 08:05)
почти
выполнить ф-цию json_decode() и присвоить результат $fotoname, если $fotoname истина и !is_array($fotoname) истина - выполнить if-блок

Так нет жишь я тоже так расуждал и написал
Цитата
if($fotoname = json_decode($sqlrow['fotoname']) && is_array($fotoname)){

Думая что если декодирование прошло удачно " json_decode($sqlrow['fotoname']) " то $fotoname будет содержать то что получилось строку масииви или че там еще.
И далее я проверю что это массив is_array($fotoname),
а php паразит ругается неопределенный идентификатор $fotoname
Xes
Вот еще примеры можно так
				if(json_decode($sqlrow['fotoname']) && is_array(json_decode($sqlrow['fotoname']))){
$fotoname = json_decode($sqlrow['fotoname']);

Но это уже не то...


if($fotoname = json_decode($sqlrow['fotoname']) && is_array(json_decode($sqlrow['fotoname']))){


Ошибки не выдает но вылетает в false


На деле сделал подлинее но понадежнее
				if($fotoname = json_decode($sqlrow['fotoname'])){
if(is_array($fotoname) && count($fotoname) == 9){
Invis1ble
Цитата
если декодирование прошло удачно " json_decode($sqlrow['fotoname']) " то $fotoname будет содержать то что получилось строку масииви или че там еще.

тогда лучше проверять на null
if (($fotoname = json_decode($sqlrow['fotoname'])) !== null && is_array($fotoname)) {

Цитата
а php паразит ругается неопределенный идентификатор $fotoname
Xes
На нул у меня чуть раньше проверено
!empty($sqlrow['fotoname'])

НУ я оставлю ка сделал , тем боле все работает. Но интересные моменты почему
Цитата
if($fotoname = json_decode($sqlrow['fotoname']) && is_array(json_decode($sqlrow['fotoname']))){
Вылетает в фальш если я знаю что в базе массив
первое влюбом случае будет массив объект (Даже если массив пустой) тоесть истина ну авторое пологике тоже истина
Invis1ble
Цитата
На нул у меня чуть раньше проверено
!empty($sqlrow['fotoname'])

это проверка на пустоту, а не на null. К тому же, здесь ты проверяешь $sqlrow['fotoname'], а в моем примере проверяется $fotoname. json_decode() возвращает null при ошибке.

Цитата
Вылетает в фальш если я знаю что в базе массив
первое влюбом случае будет массив объект (Даже если массив пустой) тоесть истина ну авторое пологике тоже истина

еще раз: приведи текст ошибки, которая у тебя была

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Xes
Странные дела действительно...
Вот что попробовал.

<?
header('Content-type: text/html; charset=utf-8');
error_reporting(E_ALL);
$fotoname_str= '["","13","","","","",""," ; ;",""]';
if($fotoname = json_decode($fotoname_str)){
if(is_array($fotoname)){
echo 'Все ок.';
}else{
echo 'Не массив';;
}
}
else{
echo 'Ошибка в if 1';
}

echo '<br>';

if($fotoname = json_decode($fotoname_str) && is_array($fotoname)){
echo 'Все ок.';
}else{
echo 'Ошибка в if 1';
}

echo '<br>';

if($fotoname = json_decode($fotoname_str) && is_array(json_decode($fotoname_str))){
echo 'Все ок.';
}else{
echo 'Ошибка в if 1';
}
?>

Ответ
Все ок.
Все ок.
Все ок.
===================================
Мой рабочий код:
При том что в базе запись такая
Цитата
["","13","","","","",""," ;",""]


if($fotoname = json_decode($sqlrow['fotoname'])){
if(is_array($fotoname) && count($fotoname) == 9){

Чтобы сильно не портить код просто добавил вторую проверку в первый иф
				if($fotoname = json_decode($sqlrow['fotoname']) && is_array($fotoname)){
if(is_array($fotoname) && count($fotoname) == 9){

Выдает ошибку:
Цитата
Notice: Undefined variable: fotoname in
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.