2013-04-09 3 views
0

J'ai un tableau qui a ce format:Obtenez Nombre d'éléments dans un tableau

array(
    info(
    Date-today => '09/04/2013' 
) 
    clients(
    id => 1001, 
    name => Fred 
) 
    more_info(
    weather-today => "cloudy" 
) 
) 

Mais parfois, je reçois les données avec plus de clients:

array(
    info(
    Date-today => '08/04/2013' 
) 
    clients(
    0(
     id => 1001, 
     name => Fred 
    ), 
    1(
     id => 1045, 
     name => Fritz 
    ) 
) 
    more_info(
    weather-today => "Sunny" 
) 
) 

Je veux compter combien de cients j'ai été renvoyé, parce que j'ai besoin d'accéder différemment aux données client s'il n'y en a qu'une ou plusieurs. J'ai essayé plusieurs options de « count() », tels que:

count(array['client']) 

mais bien sûr, s'il n'y a que 1 client, il ne retourne pas 1, elle renvoie 2 (car il y a 2 articles de client- données dans le tableau).

Des conseils?

+0

'count (tableau [ 'clients']) 'sûrement? Mais même alors, il devrait retourner le nombre d'entrées des clients, pas le nombre de sous-entrées dans le tableau 'clients', sauf si vous appelez' count() 'avec le drapeau récursif –

+0

@MarkBaker Non, car les objets ici sont aussi des tableaux , donc 'count()' compterait soit le nombre de "propriétés" soit le nombre de clients. –

+0

use ** sizeof (array ['abonnés']) **, l'abonné et le client sont-ils les mêmes? qu'en est-il de ** array ['abonnés'] ['clients'] **? –

Répondre

2

Vous devez savoir si $array['clients'] ne dispose que des indices numériques:

$size = count($array['clients']; 
if (count(array_filter(array_keys($array['clients']), 'is_int')) == $size) { 
    return $size; 
} else { 
    return 1; 
} 

Vous pouvez également utiliser l'existence d'un index numérique comme condition:

if (isset($array['clients'][0])) { 
    return count($array['clients']); 
} else { 
    return 1; 
} 
+0

compte fonctionne très bien avec les tableaux associatifs aussi. –

+0

Je ne vois pas le votre. count ($ array ["clients"]) est suffisant. –

+0

Cette "astuce sale" est moins de code et mieux à mon avis, et il y a une erreur d'analyse dans le premier bit de code – Dale

0

Si vous avez une structure de type tableau (comme la collection de clients dans votre exemple), vous devriez toujours indexer les entrées, même s'il n'y a qu'une seule entrée.

De cette façon vous ne finirez pas avec le problème que vous avez décrit.

EDIT:
Vous n'avez pas vu votre commentaire. Vous pouvez d'abord vérifier si $ array ['clients'] a du contenu (via count()).
-> Si ce n'est pas le cas, cnt = 0.
Ensuite, vérifiez si $ array ['clients'] ['0'] est défini.
-> Si elle n'est pas définie, cnt = 1.
-> Si c'est le cas, cnt = count().

Questions connexes