fijar matriz anida a variable cuando el índice coincide
Así que tengo una gran variedad llamada $categoryData que está estructurada así:
array: [
123=> array:[
total:[
red=> 155
blue=> 200
]
]
456=> array:[
total:[
red=> 678
blue=> 443
]
]
376=> array:[
total:[
red=> 843
blue=> 456
]
]
236=> array:[
total:[
red=> 456
blue=> 890
]
]
]
Está bien, y ahora lo estoy preparando para establecer básicamente un objeto a la matriz para el índice correcto, en este caso 123. Así que estoy haciendo esto:
foreach($categoryData as $data){
if($data[0] == 123){
$printData = $data[0];
}
}
dd($printData);
Esto me está dando undefined offset: 0
error y no estoy seguro por qué. Estoy consiguiendo la estructura correcta si lo dejo dentro del bucle de anteceso así que todo lo que quiero hacer es establecer el array para el índice para $printData
cuando coincide, si eso tiene sentido
¿Qué estoy haciendo mal?
Pregunta hecha hace 3 años, 4 meses, 28 días - Por codealchemyf00f
3 Respuestas:
-
Supongo que confundiste con la clave y los valores. Según su ejemplo, debe comparar índice, no valor:
foreach($categoryData as $key=>$data){ if(123 === $key){ $printData = $data; } }
Pero, de verdad, no sé por qué quieres ir con el anteceso, cuando puedes conseguir tu matriz por la llave:
$printData = $categoryData[123];
Respondida el Dec 18, 2020 a las 17:03 - por gitguru
Votos positivos: 0 | Votos negativos: 0 -
El error "undefined offset: 0" ocurre porque estás intentando acceder a un índice específico en un array multidimensional de una forma incorrecta. En este caso,
$data
es un array asociativo, por lo que no puedes acceder a un elemento específico con el índice 0.Para lograr lo que necesitas, puedes ajustar tu código de la siguiente manera:
php foreach ($categoryData as $key => $data) { if ($key == 123) { $printData = $data; break; // Terminar el bucle una vez que se haya encontrado la coincidencia } } var_dump($printData);
En este código, estamos utilizando
$key
para comparar con el índice que deseas (en este caso, 123) y luego asignamos todo el array asociado a ese índice a la variable$printData
. Además, agregamosbreak
para salir del bucle una vez que se encuentra la coincidencia para evitar seguir procesando el resto de los elementos innecesariamente.Con esto,
$printData
contendrá el array asociado al índice 123 de$categoryData
.Respondida el Dec 19, 2020 a las 16:58 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error "undefined offset: 0" ocurre porque estás intentando acceder al índice
0
de la matriz$data
, pero no existe. Esto se debe a que la matriz$data
es en realidad un array asociativo, donde las claves son los índices de categoría (por ejemplo,123
,456
, etc.).Para acceder a la matriz total para la categoría
123
, debes usar el índice de categoría como clave, así:php foreach ($categoryData as $categoryId => $data) { if ($categoryId == 123) { $printData = $data['total']; } }
Una vez que tengas la matriz
$printData
, puedes usarla para establecer el objeto deseado.Respondida el Dec 19, 2020 a las 17:04 - por Gemini
Votos positivos: 0 | Votos negativos: 0