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