Usar una variable dentro como parámetro dentro de una función en PHP

Necesito incrementar cíclicamente el valor de un parámetro dentro de una función, en este caso substr, para extraer los caracteres de una frase, uno por otro, para después hacer otro proceso. He probado poniendo una variable que se va incrementando mediante un while. Lo he probado declarando la variable como también poniéndolo como valor dentro de la función, pero no me ha dado resultado. Cuando llamo a la variable con un echo, esta sí se incrementa, pero la función sigue arrojando el resultado como si tomara solamente el primer valor que se le dio a la variable.

<?php
function trad(**$i**)
    {
        //**$i=0**;
        $f="hola";
        $p=substr("hola",**$i**,1);
        $v=strlen($f);
            while($i < $v) 
            {
            echo $p; 
            $i++;   
            }
    }
    trad(0);
?>
// resultado de esta funcion es: hhhh en vez de hola
3
задан 30.10.2016, 03:57
3 ответа

Я показываю тебе два выбора: одна, что я считаю более оптимальным (Opción 1, не перемещая параметра его в функцию) и другая, которая продолжает твою схему (Opción 2, перемещая его параметр в твою функцию).

Выбор 1:

Первое, не, потому что ты используешь ** раньше и после переменной. Твоя проблема у меня не остается совсем ясной, но а следовательно я могу приходить к заключению, что ты хочешь сделать, состоит в том, чтобы разделять String и после показывать это из-за экрана, все соединило снова.

То, что ты можешь делать, состоит в том, чтобы разделять каждый из символов String и сохранять их в array. Однажды сделанный это, пробегать каждый из элементов array, чтобы печатать их с одним foreach:

<?php
function trad()
    {
        $f="hola";
        $arr1 = str_split($f);

        foreach ($arr1 as $valor){
            echo $valor;
        }
    }
    trad();
?>

Предыдущий код возвратил бы:

hola

Выбор 2:

В случае, если ты захочешь остаться с моделью твоего примера ты был бы должен вновь делать substr снова внутри цикла. Такой, который я схватил:

<?php
function trad($i)
    {

    $f="hola";
    $v=strlen($f);

    while($i < $v) 
    {
        $p=substr($f,$i,1);
        echo $p;
        $i++;   
    }
}
trad(0);

?>

То, что он возвратил бы тебе:

hola
2
ответ дан 24.11.2019, 12:51
  • 1
    я не понимаю второй c и # 243; я говорю, что... он не имеет много чувства... echo и 2 раза переменная $p – Black Sheep 30.10.2016, 03:36
  • 2
    @aldanux В действительности во втором примере я продолжил полностью Вашу схему. Как использованный ha первая переменная перед циклом, ее использовал я tambi и # 233; n просто из-за инерции. и #191; Что podr и # 237; чтобы быть м и # 225; s работоспособный и с меньше c и # 243; я говорю мою секунду opci и # 243; n? S и # 237; но поэтому - в и # 241; adido opci и # 243; n 1, которая кажется мне многим м и # 225; s чистая и эффективная. Во втором opci и # 243; n я продолжил Вашу схему полностью для того, чтобы он смог замечать ошибки, которые он совершил в Ваш c и # 243; я говорю и смогите сравнивать. – Francisco Romero 30.10.2016, 03:41
  • 3
    @aldanux В конце концов, я оставил opci и # 243; n 2 немного м и # 225; s отложи. Он давал мне терзания она оставлять туз и # 237;. – Francisco Romero 30.10.2016, 04:04
  • 4
    jajaja также он не был pa так человеком. Но если уже он намного лучше! Но я остаюсь, не понимая цели этого и # 241; or (OP):/ – Black Sheep 30.10.2016, 04:06
  • 5
    @aldanux Это s и # 233; но м и # 225; s стой ense и # 241; ar хорошо, что для ense и # 241; ar зло лучший не ense и # 241; ar: D. Мне также это не слишком ясно правду. Не имеет смысл разделять string, чтобы объединенный показывать все, хотя он то и #250; nico, который я смог интерпретировать вопроса. – Francisco Romero 30.10.2016, 04:09

Функция refactorizada (применяя изменения), не необходимо работать с цепью в твоей функции substr, если не использовать прямо переменную. то же самое, что и ты делаешь с strlen

<?php 
  function trad($i)
   {
      $f="hola";
      while($i < strlen($f)) 
      {
       echo substr($f,$i++,1);
      }
    }
  trad(0); 
 ?>

Хотя рекомендация состояла бы в том, чтобы цепь ты также получил ее из-за parámetro и твоя функция была чем-то более глобальным и completa

 <?php 
  function trad($i,$f)
  {
    while($i < strlen($f)) 
     {
      echo substr($f,$i++,1);
    }
  }
 trad(0,"CualqierCadena"); 
 ?>
0
ответ дан 24.11.2019, 12:51

Не, если преуспеет этот раз, потому что еще не действительно твоя цель, но я оставляю тебе функцию, где ты мог бы играть немного с string, как я думаю, что ты это желаешь:

Видеть Demo

function trad($string, $i, $t) {

    $p = '';

    for ($i; $i < strlen($string); $i++) {

        $p .= substr($string, $i, $t);
    }

     echo $p;
}

trad('hola', 0, 1);
1
ответ дан 24.11.2019, 12:51