2013-04-09 64 views
0

我有了這種格式的數組:獲取NR項目的數組中的

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

但有時候,我與更多的客戶接收數據:

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

我想算多少我返回的客戶端,因爲我需要以不同的方式訪問客戶端數據(如果只有一個或多個客戶端數據)。 我試了好幾種「計數()」的選項,如:

count(array['client']) 

但當然,如果只有1個客戶端,它不返回1,它返回2(因爲有2項客戶機的數組中的數據)。

任何提示?

+0

'計數(陣列[ '客戶'])'當然?但即使如此,除非您使用遞歸標記 – 2013-04-09 06:43:14

+0

@MarkBaker否調用'count()',否則它應該返回客戶端條目數,而不是客戶端數組中的子條目數,因爲這裏的對象也是數組,所以'count()'要麼計算「屬性」的數量或客戶端的數量。 – 2013-04-09 06:44:53

+0

使用** sizeof(array ['subscriber'])**,訂閱者和客戶端是否相同? ** array ['subscribers'] ['clients'] **? – 2013-04-09 06:44:56

回答

2

你將不得不找出$array['clients']是否只有數字指標:

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

另外,使用一個數字索引的存在爲條件:

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

count也適用於關聯數組。 – 2013-04-09 06:52:02

+0

我看不到你的。 count($ array [「clients」])就足夠了。 – 2013-04-09 06:53:26

+0

「髒伎倆」是少代碼,在我看來更好,並在代碼的第一位 – Dale 2013-04-09 06:54:13

0

如果您有一個類似數組的結構(例如您的示例中的客戶端集合),即使只有一個條目,也應始終索引條目。

這樣你就不會因爲你描述的問題而結束了。

編輯:
沒有看到您的評論。 您可以先檢查$ array ['clients']是否有任何內容(通過count())。
- >如果沒有,cnt = 0.
然後檢查是否定義了$ array ['clients'] ['0']。
- >如果沒有定義,cnt = 1。
- >如果是,cnt = count()。