Agregar espacio después de cada 4to carácter

4 minutos de lectura

avatar de usuario
usuario990767

Quiero agregar un espacio a alguna salida después de cada cuarto carácter hasta el final de la cadena. Lo intenté:

$str = $rows['value'];
<? echo substr($str, 0, 4) . ' ' . substr($str, 4); ?>

Lo que me acaba de dar el espacio después de los primeros 4 caracteres.

¿Cómo puedo hacer que se muestre después de cada 4?

avatar de usuario
Félix Kling

Puedes usar chunk_split [docs]:

$str = chunk_split($rows['value'], 4, ' ');

MANIFESTACIÓN

Si la longitud de la cadena es un múltiplo de cuatro pero no desea un espacio final, puede pasar el resultado a trim.

  • Tomando la pregunta estrictamente, el OP exige el espacio de rastreo si está en la cuarta posición. Sin embargo, a alguien no le gusta eso, también obtuve un voto negativo: stackoverflow.com/a/11807841/367456

    – hakré

    4 de agosto de 2012 a las 10:31


  • hazlo rtrim($str, ' ') ser más preciso. Pero todavía le falta el problema para eliminar ningún espacios finales.

    – hakré

    4 de agosto de 2012 a las 10:35


  • Verdadero. Bueno, el OP sabrá lo que quiere 🙂

    – Félix Kling

    4 de agosto de 2012 a las 10:38

  • Claro, no voy a criticar ese nivel hasta que se aclare :). Sin embargo, deseaba que el votante negativo hubiera compartido. Parece que él / ella recuperó el tuyo, huele que no le gustaba usar wordwrap, sin embargo, eso es solo una suposición descabellada ^^

    – hakré

    4 de agosto de 2012 a las 10:40

avatar de usuario
Olemak

Wordwrap hace exactamente lo que quieres:

echo wordwrap('12345678' , 4 , ' ' , true )

dará salida: 1234 5678

Si desea, digamos, un guión después de cada segundo dígito, cambie el “4” por un “2” y el espacio por un guión:

echo wordwrap('1234567890' , 2 , '-' , true )

dará salida: 12-34-56-78-90

Referencia – ajuste de línea

  • esta es la mejor respuesta que chunk_split porque string que se agrega en cada n carácter también agregó esto string al final de la cadena_dada

    – Azhar Uddin Jeque

    11 de enero a las 8:34

¿Ya has visto esta función llamada wordwrap?
http://us2.php.net/manual/en/function.wordwrap.php

Aquí hay una solución. Funciona nada más sacarlo de la caja así.

<?php
$text = "Thiswordissoverylong.";
$newtext = wordwrap($text, 4, "\n", true);
echo "$newtext\n";
?>

  • Eso no inserta un espacio después de cada cuarto carácter.

    – hakré

    4 de agosto de 2012 a las 10:32


  • Parece que esto hace algo totalmente diferente, codepad.org/4uDNeEWlde cinco espacios requeridos, solo uno está allí (y como parece, solo porque ya estaba en la cadena original).

    – hakré

    4 de agosto de 2012 a las 10:48


avatar de usuario
Melomán

Aquí hay un ejemplo de una cadena con una longitud que no es un múltiplo de 4 (o 5 en mi caso).

function space($str, $step, $reverse = false) {
    
    if ($reverse)
        return strrev(chunk_split(strrev($str), $step, ' '));
    
    return chunk_split($str, $step, ' ');
}

Usar :

echo space("0000000152748541695882", 5);

resultado: 00000 00152 74854 16958 82

Uso del modo inverso (“código BVR” para facturación suiza):

echo space("1400360152748541695882", 5, true);

resultado: 14 00360 15274 85416 95882

EDITAR 2021-02-09

También es útil para formatear códigos de barras EAN13:

space("7640187670868", 6, true);

resultado : 7 640187 670868

versión de sintaxis corta:

function space($s=false,$t=0,$r=false){return(!$s)?false:(($r)?trim(strrev(chunk_split(strrev($s),$t,' '))):trim(chunk_split($s,$t,' ')));}

Espero que pueda ayudar a algunos de ustedes.

El camino sería dividirlo en fragmentos de 4 caracteres y luego unirlos nuevamente con un espacio entre cada parte.

Como técnicamente se perdería insertar uno al final si el último fragmento tuviera exactamente 4 caracteres, tendríamos que agregarlo manualmente (Manifestación):

$chunk_length = 4;
$chunks = str_split($str, $chunk_length);
$last = end($chunks);
if (strlen($last) === $chunk_length) {
    $chunks[] = '';
}
$str_with_spaces = implode(' ', $chunks);

  • versión minificada: chunk_split($str, $chunkLength, ' ');

    – Brad Kent

    23 de noviembre de 2016 a las 22:31

un trazador de líneas:

$yourstring = "1234567890";
echo implode(" ", str_split($yourstring, 4))." ";

Esto debería darte como resultado:
1234 5678 90

eso es todo

  • versión minificada: chunk_split($str, $chunkLength, ' ');

    – Brad Kent

    23 de noviembre de 2016 a las 22:31

La función wordwrap() básicamente hace lo mismo, sin embargo, esto debería funcionar también.

$newstr="";
$len = strlen($str); 
for($i = 0; $i < $len; $i++) {
    $newstr.= $str[$i];
    if (($i+1) % 4 == 0) {
        $newstr.= ' ';
    }
}

  • afaik, debe guardar el valor de strlen en lugar de usarlo en el ciclo for porque usarlo en el ciclo hará que la longitud de la cadena se evalúe con cada iteración

    – Eva

    4 de agosto de 2012 a las 10:43

  • Tienes razón si esto es un muy largo cuerda. Sin embargo, no se necesita mucho más tiempo para cadenas cortas. Actualicé la respuesta de acuerdo con tu pensamiento de todos modos.

    – fdomig

    4 de agosto de 2012 a las 10:53

¿Ha sido útil esta solución?