es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener la primera letra de cada palabra en una cadena – Desplazamiento de cadena no inicializado

No puedo entender las soluciones propuestas en otras preguntas o resolver el error de PHP: “Uninitialized string offset: 0”. Utilicé este código para crear un acrónimo a partir de una cadena:

$article = 'the Central intelligence agency';
$words = array('the', 'of', 'to');
$pattern = '/\b(?:' . join('|', $words) . ')\b/i';
$entityWords = preg_replace($pattern, '', $article);

$words = explode(" ", $entityWords);
var_dump($words);
$entityAcro = "";
foreach ($words as $letter) {
        ->   $entityAcro .= $letter[0];
}
echo strtoupper($entityAcro);

Obtengo el siguiente resultado:

Advertencia: Uninitialized string offset: 0 ….línea (->)

Advertencia: Uninitialized string offset: 0 ….línea (->)

CIA

No entiendo esta solución: “debes saber si existe (isset)”. Administro múltiples organizaciones y no puedo saber de antemano cuántas palabras hay en la cadena.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando crear un acrónimo a partir de una cadena, pero estás obteniendo un mensaje de error “Offset de una cadena no inicializado: 0” en tu código. Este error ocurre porque estás intentando acceder al primer carácter de una cadena que está vacía.

    En el bucle foreach, se asigna la variable $letter a cada palabra en el array $words. Luego, intentas acceder al primer carácter de $letter usando el índice [0]. Pero si $letter es una cadena vacía, acceder a su primer carácter resultará en el error “Offset de una cadena no inicializado: 0”.

    Para solucionar este error, puedes agregar una comprobación para verificar si la cadena no está vacía antes de acceder a su primer carácter. Puedes hacer esto utilizando la función isset(), que verifica si una variable está definida y no es nula. Así es como puedes modificar tu código:

    foreach ($words as $letter) {
        if (isset($letter[0])) {
            $entityAcro .= $letter[0];
        }
    }
    

    Esto verificará si $letter[0] está definido antes de concatenarlo a $entityAcro. Si $letter es una cadena vacía o nula, la condición if será falsa y no se concatenará nada.

    En cuanto a tu preocupación sobre no conocer el número de palabras en la cadena de antemano, todavía puedes usar la solución anterior. Funcionará independientemente del número de palabras en la cadena.

Comments are closed.