Доброго времени, форумчане! Возник вопрос. Почему 0 не работает также как все нормальные числа 1 - 9 ? есть цикл for и разбор по foreach Код (PHP): for($i=0;$i<=sizeof($array);$i++) { foreach($abc[$i] as $key => $value) { $key=$key; $value=$value; } $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}'); self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key)); self::tag($top.$array[$i],$literal($array[$i],$key,$value)); } Так, вот, все остальные числа работают нормально и дают результат только своего числа то есть: 1 = 100,150,122 2 = 223,222,252 и т.д. А как только используется 0 так он все до кучи выводит, вот какого вообще, так происходит ?!
Если честно, нифига не понял из вопроса. Где тут в этом коде ноль, куда он попадает, в каком месте неправильно срабатывает (что хочешь получить и что получаешь на самом деле). Попробуй использовать тройное равенство вместо двойного: if($a === $b)
Это что за хитросплетение мыслей? Можешь объяснить сам себе, что оно делает? Зачем создаёшь функцию в цикле? И объясни словами что вообще нужно и что получается на деле. Смотрю на код и не вижу, что он вообще должен делать. И что он делает. Есть предположение, что закрывающаяся скобочка, которая на 7-й строчке из твоего фрагмента, должна переместиться на 3 строчки вниз, под последний self::tag...
Ни надо там ничего никуда переносит! Прочти под кодом, что я написал, поймешь. Все числа от 1 до - 9 нормально выводятся, а 0 выводит все. Какого - то фига, хотя работает все в одном месте.
Не-а, не понял. У тебя-то в голове общая картина, как всё это должно выглядеть и работать, наверняка, есть, но другой человек не может залезть к тебе в голову и тоже всё увидеть.
Вот тут проблема оказывается... Код (PHP): $array=array(0,'B'); $f='Bcv'; for($i=0;$i<=sizeof($array);$i++) { if(mb_substr($f,0,1,'utf-8')==$array[$i]) { echo $array[$i].'=='.$f.'<br>'; } } Вывод: 0==Bcv B==Bcv Вот почему ноль тоже ровняет? Его же нет в названии. Надо, чтобы было как везде, нормально, если есть ровняет, если нет, то нет!!! Я мож туплю не так чего нибудь прописал. Но это странно, ибо с другими числами если дописать $array=array(0,1-9,'B'); все ок, ничего не будет выводить.
Ну вот теперь вопрос понятен. При сравнении строки с числом с помощью двойного равенства - строка преобразуется к типу int (к числу). Если строка начинается с НЕ цифр - то она преобразовывается к нулю. Код (PHP): if(mb_substr($f, 0, 1, 'utf-8') === ((string) $array[$i]))
Код (PHP): for($i=0;$i<=sizeof($array);$i++) { foreach($abc[$i] as $key => $value) { $key=$key; $value=$value; } $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}'); self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key)); self::tag($top.$array[$i],$literal($array[$i],$key,$value)); } Тут собственно весь крипт не излогается, но суть получение названия тега который назначаем в шаблоне. Код (PHP): for($i=0;$i<=sizeof($array);$i++) { foreach($abc[$i] as $key => $value){} $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}'); self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key)); self::tag($top.$array[$i],$literal($array[$i],$key,$value)); } так, тоже работает )) намутилось )) только как было замеченно, тут тоже): Код (PHP): $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}'); нужно тоже так: Код (PHP): $literal=create_function('$a,$b,$c','if($a===$b){return $c;}else{return\'\';}'); ===, только без (string)