0
votes

Compter les sous-tableaux en php

j'ai cette sortie je veux une fonction pour compter tous les enfants merci im utilisant la version 7.1 de php

Array
(
    [0] => stdClass Object
        (
            [slug] => home
            [name] => home
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [slug] => contact-us
                            [name] => Contact Us
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [slug] => new
                                            [name] => new
                                            [children] => Array
                                                (
                                                    [0] => stdClass Object
                                                        (
                                                            [slug] => km
                                                            [name] => km
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

je veux une fonction pour compter tous les enfants merci im utilisant la version 7.1 de php

php

3 commentaires

Qu'avez-vous essayé jusqu'à présent? Cela peut être fait en utilisant la fonction récursive.


Voici le bon exemple: stackoverflow.com/questions/27494534/...


Qu'est-il arrivé au message auquel j'ai pris le temps de répondre hier?


3 Réponses :


0
votes

Nombre de tableaux php récursif

 $array=json_decode(json_encode($yourdata), true);

echo count($array, COUNT_RECURSIVE);

Attention votre code est a stdClass, vous devez le convertir en tableau

echo count($array, COUNT_RECURSIVE);


10 commentaires

je veux juste le nombre d'enfants par exemple dans mon code il y a au total 3 enfants


count (array_values ($ yourdata));


ça donne juste 1 :(


Voulez-vous que les enfants récursifs comptent?


Je ne comprends pas


Donne un objet stdClass


avez-vous trouvé une solution?


ouais. Je vais envoyer


Je ne trouve aucune option pour DM :(


regarde mon profil ... il y a des liens de compte



0
votes
function count_array($a){
        $count = 0;
        foreach ($a as $key => $value) {
            if(is_array($value)){
                $count += count_array($value);
            }else if($value instanceof stdClass)
                $count += count_array(json_decode(json_encode($value), true));
            else{
                ++$count;
            } 
        }
        
        return $count;
    }

1 commentaires

Bonne idée, mais vous comptez les objets ainsi que les tableaux. Cette solution est venue avec un nombre de 8.



0
votes

Une fonction récursive donnera la réponse en s'appelant à chaque fois qu'elle détecte des enfants:

<?php

$data = array (
  0 => 
  (object) array(
     'slug' => 'home',
     'name' => 'home',
     'children' => 
    array (
      0 => 
      (object) array(
         'slug' => 'contact-us',
         'name' => 'Contact Us',
         'children' => 
        array (
          0 => 
          (object) array(
             'slug' => 'new',
             'name' => 'new',
             'children' => 
            array (
              0 => 
              (object) array(
                 'slug' => 'km',
                 'name' => 'km',
              ),
            ),
          ),
        ),
      ),
    ),
  ),
);

// expects an array as input parameter, per your sample data
function myCount(array $data) {
    // static variable keeps its value, similar to a global but not available outside function
    static $count = 0;
    
    // this actually counts sibling's children, too.  If you want just the first child, use $data[0]
    foreach($data as $d) {
        // each array contains an object, so check if the object has the property 'children'
        if(property_exists($d,'children')) {
            
            // call the function again to see how many children this child has
            myCount($d->children);
            $count++; // count here to only count children
        }
        // counts siblings and children
        // $count++;  
    }
    return $count;
}

print myCount($data);

Exemple de travail sur http://sandbox.onlinephpfunctions.com/code/b6769a58b617926ba9daaa1399c4fdda56fab225


0 commentaires