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
3 Réponses :
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);
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
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; }
Bonne idée, mais vous comptez les objets ainsi que les tableaux. Cette solution est venue avec un nombre de 8.
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
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?