Задание: дана строка Mihail. Необходимо вывести ее, а также вывести Miha из нее. Используя функции работы со строками, и циклы Собственно весь процесс и вопрос находятся ниже в виде кода. Подскажите пожалуйста. PHP: <?php /*Задание: дана строка Mihail. Необходимо вывести ее, а также вывести Miha из нее. Используя функции работы со строками, и циклы*/ echo "вариант 1 <br /><br />"; $str = "Mihail"; echo $str."<br />"; echo substr($str, 0, 4)."<br />"; unset($str); $y= (int) strlen($str); //проверяем удалилась ли строка. echo $y." Если ноль, то строка удалилась <br /><br />"; unset($y); echo "вариант 2 через цикл While <br /><br />"; $str = "Mihail"; $i=0; $y= strlen($str); While ($i<$y){ if($i == 4){ //проверяем, у нас Miha это 4 символа, от 0 до 3. и выводим циклом. break; } echo $str{$i}; $i++; } unset($str); $z= (int) strlen($str); //проверяем удалилась ли строка. echo "<br />". $z." Если ноль, то строка удалилась <br /><br />"; unset($z); echo 'вариант 3 через цикл While, но, работаем с элементами массива. <br /> Допустим мы знаем что нам надо вывести все символы до второго i, <br /> но у нас уже есть одно i, поэтому, мы не можем поставить условие if($str{$i}==i) break; <br /><br />'; //Выходим из ситуации через символ а $str = "Mihail"; $i=0; $y= strlen($str); While ($i<$y){ if($str{$i} == "a"){ //проверяем, равен ли элемент массива и а; break; } echo $str{$i}; $i++; } echo " <br />Но тогда выводится Mih, без а, <br /> как вариант, мы можем, его окнечно прибавить, <br /> но это немного не то. Идеально было бы проверить на i, но нельзя <br /> вместо этого попробуем проверить на l <br /><br />"; unset($str); $str = "Mihail"; $i=0; $y= strlen($str); $x=$y-2; $rts = ""; While ($i<$y){ if($str{$i} == "l"){ //проверяем, равен ли элемент массива и l; break; } $rts{$i} = $str{$i} ; $i++; } echo $rts."<br />"; // выводит на один символ больше unset($rts{$x}); echo $rts; // Выводит как надо echo " <br />и вот тут выводит, как Array. Почему?? Знаю, как удалить через substr, но вот заморочился, и интересен этот, третий вариант. <br /><br />"; ?> вот какой результат получил Спойлер: результат вариант 1 Mihail Miha 0 Если ноль, то строка удалилась вариант 2 через цикл While Miha 0 Если ноль, то строка удалилась вариант 3 через цикл While, но, работаем с элементами массива. Допустим мы знаем что нам надо вывести все символы до второго i, но у нас уже есть одно i, поэтому, мы не можем поставить условие if($str{$i}==i) break; Mih Но тогда выводится Mih, без а, как вариант, мы можем, его окнечно прибавить, но это немного не то. Идеально было бы проверить на i, но нельзя вместо этого попробуем проверить на l Array Array и вот тут выводит, как Array. Почему?? Знаю, как удалить через substr, но вот заморочился, и интересен этот, третий вариант.
Какой-то сюр... $rts выводит как Array, потому что это....массив. Массив автоматом не преобразуется в строку. Строка в PHP - это поток байтов. Массив - хэшмапа. Тут не Си, где это одно и то же. То, что в строке можно обращаться к конкретному байту (именно байту, а не символу, заметь), не значит, что она работает так же, как и пыховый массив. Не надо выводить строки в циклах. Плохая это затея. И по производительности днище. А потом окажется, что существуют мультибайтовые кодировки и все, приехали.
Да вот я уже понял, что пытаюсь работать со строкой, как с массивом. Но, я же объявил $rts=""; как пустую строку, почему он в массив перешел? но вот вопрос если можно писать $rts = $str{1}; добавляя в строку значение, то почему нельзя писать $rts{1} = $str{1}; а в моем случае тупо по счетчику.
Но, ели написать $rts = $rts . $str{$i} ; то все работает. Получается, если я делаю операцию удаления , то работаю с массивом? А так строка? Правильный вывод? а дальше с $rts все равно удалять последний символ не через unset, а через $rts = substr($rts,0,-1); --- Добавлено --- Вот и вывел))) но путь был тернист.) PHP: $str = "Mihail"; $i=0; $y= strlen($str); $x=$y-2; $rts = ""; While ($i<$y){ if($str{$i} == "l"){ //проверяем, равен ли элемент массива и l; break; } $rts = $rts .",". $str{$i} ; $i++; } $arr = explode(",", $rts); unset($arr[0]); unset($arr[5]); $rts = implode('',$arr); echo $rts." вот и вывели)))))";
Потому что динамическая типизация. Начал работать с ним как с массивом сходу. Изначально переменная была пустая. Пых не долго думая привел ее к массиву. --- Добавлено --- Я не знаю, зачем вы это делаете, но делать так в реальной жизни не надо.
Я знаю) надо, как в первом варианте, даже через mb_substr лучше, просто ковыряюсь для опыта. Что и как работает. Ну интересно мне.) А вот ради интереса, вот так же можно использовать конкатенацию $rts=$rts.",".$str{$i};? или тоже в реальной жизни не применимо?
Правильно. Да, можно. А еще эту запись можно сократить до $rts .= "," . $str{$i}; и да, а почему обращение к массиву такое..кхм..нестандартное? Чем квадратные скобки не угодили?