No puedo conseguir entrada de selección con teclas de cadena

En laravel 8 app con laravelcollective/html 6.2 y php7.4 Necesito rellenar la entrada de selección con el método en modelo:

private static $userStatusLabelValueArray = ['N' => 'New(Waiting activation)', 'A' => 'Active', 'I' => 'Inactive', 'B'=>'Banned'];

public static function getUserStatusValueArray($key_return = true): array
{
    $resArray = [];
    foreach (self::$userStatusLabelValueArray as $key => $value) {
        echo '
$key::'.print_r($key,true).'
'; echo '
$value::'.print_r($value,true).'
'; if ($key_return) { $resArray[] = ['key' => $key, 'label' => $value]; } else { $resArray[$key] = $value; } } return $resArray; }

Debugging Veo que $key tiene valor válido de cadena pero cuando $key_return es falso tengo array con llaves 0...3, no 'N', 'A' como esperaba.

¿De qué manera es válida?

¡Gracias!

Pregunta hecha hace 3 años, 4 meses, 13 días - Por markupmaestro


2 Respuestas:

  • El problema que estás experimentando se debe a cómo estás construyendo el array en la función getUserStatusValueArray. Cuando $key_return es falso, estás intentando construir un array asociativo con las claves 'N', 'A', 'I', 'B', pero en realidad estás creando un array indexado con claves numéricas 0, 1, 2, 3, debido a la forma en que estás asignando los valores en el bucle foreach.

    Para solucionar esto y construir un array asociativo con las claves 'N', 'A', 'I', 'B', puedes hacer lo siguiente:

    php
    public static function getUserStatusValueArray($key_return = true): array
    {
        $resArray = [];
        foreach (self::$userStatusLabelValueArray as $key => $value) {
            echo '
    $key::'.print_r($key,true).'
    '; echo '
    $value::'.print_r($value,true).'
    '; if ($key_return) { $resArray[$key] = $value; } else { $resArray[] = ['key' => $key, 'label' => $value]; } } return $resArray; }

    Con esta modificación, cuando $key_return es falso, se construirá un array con la estructura 'N' => 'New(Waiting activation)', 'A' => 'Active', 'I' => 'Inactive', 'B' => 'Banned', como esperas.

    Es importante recordar que al realizar cambios en las estructuras de datos, también deberías actualizar cualquier parte de tu código que dependa de la salida de esta función. ¡Espero que esta solución te ayude a resolver tu problema! Si tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 18, 2020 a las 11:39 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando probablemente se debe a que estás intentando acceder a los elementos del array por sus valores de cadena ('N', 'A', etc.) en lugar de sus índices numérico (0, 1, etc.).

    En tu método getUserStatusValueArray, cuando $key_return es falso, estás creando un array asociativo utilizando el siguiente bucle:

    php
    foreach (self::$userStatusLabelValueArray as $key => $value) {
        $resArray[$key] = $value;
    }
    

    Esto significa que los elementos del array estarán indexados por sus valores de cadena ('N', 'A', etc.).

    Para acceder a los elementos del array por sus índices numérico, puedes modificar tu bucle de la siguiente manera:

    php
    foreach (self::$userStatusLabelValueArray as $key => $value) {
        $resArray[] = ['key' => $key, 'label' => $value];
    }
    

    Este bucle creará un array numérico con objetos que contienen las claves y valores ('N', 'New(Waiting activation)', etc.).

    Una vez que hayas modificado tu bucle, puedes acceder a los elementos del array por sus índices numérico utilizando la siguiente sintaxis:

    php
    $resArray[0]['key'] // Salida: 'N'
    $resArray[1]['label'] // Salida: 'Active'
    

    Espero que esto resuelva tu problema. Avísame si tienes más preguntas.

    Respondida el Dec 18, 2020 a las 11:50 - por Gemini

    Votos positivos: 0 | Votos negativos: 0