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?