За последние 24 часа нас посетили 62102 программиста и 1781 робот. Сейчас ищут 820 программистов ...

Ну(о)ль никак все числа

Тема в разделе "PHP для новичков", создана пользователем Your, 18 янв 2012.

  1. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Доброго времени, форумчане!
    Возник вопрос.

    Почему 0 не работает также как все нормальные числа 1 - 9 ?

    есть цикл for и разбор по foreach

    Код (PHP):
    1. for($i=0;$i<=sizeof($array);$i++)
    2. {
    3.     foreach($abc[$i] as $key => $value)
    4.     {
    5.         $key=$key;
    6.         $value=$value;
    7.     }
    8.     $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}');
    9.     self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key));
    10.     self::tag($top.$array[$i],$literal($array[$i],$key,$value));
    11. } 
    Так, вот, все остальные числа работают нормально и дают результат только своего числа
    то есть:
    1 = 100,150,122
    2 = 223,222,252 и т.д.

    А как только используется 0 так он все до кучи выводит, вот какого вообще, так происходит ?!
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если честно, нифига не понял из вопроса. Где тут в этом коде ноль, куда он попадает, в каком месте неправильно срабатывает (что хочешь получить и что получаешь на самом деле).

    Попробуй использовать тройное равенство вместо двойного:
    if($a === $b)
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Не пойму причем, тут тройное равенство, но это не помогает.
    Поправил дополнил, код.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это что за хитросплетение мыслей? Можешь объяснить сам себе, что оно делает?
    Зачем создаёшь функцию в цикле?

    И объясни словами что вообще нужно и что получается на деле. Смотрю на код и не вижу, что он вообще должен делать. И что он делает.

    Есть предположение, что закрывающаяся скобочка, которая на 7-й строчке из твоего фрагмента, должна переместиться на 3 строчки вниз, под последний self::tag...
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ни надо там ничего никуда переносит!

    Прочти под кодом, что я написал, поймешь.
    Все числа от 1 до - 9 нормально выводятся, а 0 выводит все.
    Какого - то фига, хотя работает все в одном месте.
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не-а, не понял.
    У тебя-то в голове общая картина, как всё это должно выглядеть и работать, наверняка, есть, но другой человек не может залезть к тебе в голову и тоже всё увидеть.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Вот тут проблема оказывается...
    Код (PHP):
    1. $array=array(0,'B');
    2. $f='Bcv';
    3. for($i=0;$i<=sizeof($array);$i++)
    4. {
    5.     if(mb_substr($f,0,1,'utf-8')==$array[$i])
    6.     {
    7.         echo $array[$i].'=='.$f.'<br>';
    8.     }
    9. }
    10.  
    Вывод:
    0==Bcv
    B==Bcv

    Вот почему ноль тоже ровняет? Его же нет в названии.
    Надо, чтобы было как везде, нормально, если есть ровняет, если нет, то нет!!!

    Я мож туплю не так чего нибудь прописал.
    Но это странно, ибо с другими числами если дописать $array=array(0,1-9,'B'); все ок, ничего не будет выводить.
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну вот теперь вопрос понятен. При сравнении строки с числом с помощью двойного равенства - строка преобразуется к типу int (к числу). Если строка начинается с НЕ цифр - то она преобразовывается к нулю.

    Код (PHP):
    1. if(mb_substr($f, 0, 1, 'utf-8') === ((string) $array[$i])) 
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ах, точно!!!! большущее спасибо!!!!!
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. for($i=0;$i<=sizeof($array);$i++)
    2. {
    3.     foreach($abc[$i] as $key => $value)
    4.     {
    5.         $key=$key;
    6.         $value=$value;
    7.     }
    8.     $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}');
    9.     self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key));
    10.     self::tag($top.$array[$i],$literal($array[$i],$key,$value));
    11. }  
    Тут собственно весь крипт не излогается, но суть получение названия тега который назначаем в шаблоне.

    Код (PHP):
    1. for($i=0;$i<=sizeof($array);$i++)
    2. {
    3.     foreach($abc[$i] as $key => $value){}
    4.     $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}');
    5.     self::tag(mb_strtolower($top.'_'.$array[$i],'utf-8'),$literal($array[$i],$key,$key));
    6.     self::tag($top.$array[$i],$literal($array[$i],$key,$value));
    7. }  
    так, тоже работает :)))
    намутилось :)))

    только как было замеченно, тут тоже):
    Код (PHP):
    1. $literal=create_function('$a,$b,$c','if($a==$b){return $c;}else{return\'\';}'); 
    нужно тоже так:
    Код (PHP):
    1. $literal=create_function('$a,$b,$c','if($a===$b){return $c;}else{return\'\';}'); 
    ===, только без (string)