cómo contar objetos anidados dentro de la matriz en php

Tengo datos como este:

array: [
   0: [
     0: {fruits: "apple", price: "15000"},
     1: {fruits: "orange", price: "12000"},
   ],
   1: [
     0: {fruits: "grape", price: "13000"},
     1: {fruits: "chery", price: "14000"},
     2: {fruits: "longan", price: "12000"},
   ],
   2: [
     0: {fruits: "manggo", price: "16000"},
     1: {fruits: "dragon fruit", price: "17000"},
     2: {fruits: "avocado", price: "18000"},
     3: {fruits: "coconut", price: "19000"},
   ],
]

Quiero preguntarme cómo saber la longitud de los segundos datos, ya intento usar bucle anidado pero el resultado no es igual con mi expectativa mis datos vienen así:

array: [
  0: {fruits: "apple", price: "15000"},
  1: {fruits: "orange", price: "12000"},
  2: {fruits: "grape", price: "13000"},
  3: {fruits: "chery", price: "14000"},
  4: {fruits: "longan", price: "12000"},
  5: {fruits: "manggo", price: "16000"},
  6: {fruits: "dragon fruit", price: "17000"},
  7: {fruits: "avocado", price: "18000"},
  8: {fruits: "coconut", price: "19000"},
]

y cuando intento contar todos mis datos the result : 9¿Y cómo contar mi objeto total dentro de mi matriz? Resultado de la espera:

array 0 = 2, array 1 = 3, array 2 = 4

Pregunta hecha hace 3 años, 4 meses, 29 días - Por bitwisewizard


3 Respuestas:

  • Puedes usar array_map (que en este caso es más que suficiente):

    array_map('count', $fruits)
    

    Si lo prefiere puede utilizar los métodos de Colección para ayudar a obtener su cuenta de cada "grupo":

    collect($fruits)->map(fn ($i) => count($i))->all()
    

    O más corto:

    collect($fruits)->map('count')->all()
    

    Creamos una colección de la matriz y utilizamos la map método para iterar a través de cada "grupo" (elemento de ese array) y devolver el conteo del "grupo". Luego para obtener el array de la Colección, all.

    Manual PHP.net - Funciones de Array - array_map

    Laravel 8.x Docs - Colecciones - Métodos disponibles - map

    Laravel 8.x Docs - Colecciones - Métodos disponibles - all

    Respondida el Dec 17, 2020 a las 03:51 - por Brian

    Votos positivos: 0 | Votos negativos: 0

  • Para contar la cantidad de objetos anidados dentro de cada subarray en tu matriz, puedes recorrer la matriz y contar la cantidad de elementos en cada subarray. Aquí te muestro un ejemplo de cómo hacerlo en PHP:

    php
    $data = [
        0 => [
            ["fruits" => "apple", "price" => "15000"],
            ["fruits" => "orange", "price" => "12000"],
        ],
        1 => [
            ["fruits" => "grape", "price" => "13000"],
            ["fruits" => "chery", "price" => "14000"],
            ["fruits" => "longan", "price" => "12000"],
        ],
        2 => [
            ["fruits" => "manggo", "price" => "16000"],
            ["fruits" => "dragon fruit", "price" => "17000"],
            ["fruits" => "avocado", "price" => "18000"],
            ["fruits" => "coconut", "price" => "19000"],
        ],
    ];
    
    $totalObjects = count($data, COUNT_RECURSIVE) - count($data);
    
    foreach ($data as $key => $array) {
        $total = count($array);
        echo "array $key = $total, ";
    }
    

    En este código, primero se cuenta la cantidad total de elementos en la matriz incluyendo los elementos anidados usando count($data, COUNT_RECURSIVE). Luego, se descuenta la cantidad de subarrays en la matriz original para obtener el total de objetos anidados.

    Después, se recorre la matriz y se cuenta la cantidad de elementos en cada subarray, mostrando el resultado esperado.

    Espero que esta respuesta te haya sido de ayuda. ¿Hay algo más en lo que pueda asistirte?

    Respondida el Dec 18, 2020 a las 03:46 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para obtener la longitud del segundo conjunto de datos:

    Puedes usar la función count() incorporada para obtener la longitud de una matriz:

    php
    $segundoConjuntoDatos = $array[1];
    $longitud = count($segundoConjuntoDatos);
    

    El valor de $longitud será 3 en este caso.

    Para contar el número total de objetos en la matriz:

    Puedes iterar sobre la matriz y contar el número de objetos en cada conjunto de datos:

    php
    $contadorTotal = 0;
    foreach ($array as $conjuntoDatos) {
        $contadorTotal += count($conjuntoDatos);
    }
    

    El valor de $contadorTotal será 9 en este caso.

    Para contar el número de objetos en cada conjunto de datos:

    Puedes crear una nueva matriz que contenga el número de objetos en cada conjunto de datos:

    php
    $contadores = [];
    foreach ($array as $indice => $conjuntoDatos) {
        $contadores[$indice] = count($conjuntoDatos);
    }
    

    La matriz $contadores tendrá los siguientes valores:

    
    [
        0 => 2,
        1 => 3,
        2 => 4
    ]
    

    Estos valores representan el número de objetos en cada conjunto de datos en la matriz original.

    Respondida el Dec 18, 2020 a las 03:57 - por Gemini

    Votos positivos: 0 | Votos negativos: 0