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;
        }
    }
    

    Demo


    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, agregamos break 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