0

次の形式の配列があります。

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"
  )
)

返された cients の数を数えたいと思います。これは、クライアント データが 1 つまたは複数ある場合は、別の方法でクライアント データにアクセスする必要があるためです。次のようないくつかの「count()」オプションを試しました。

count(array['client'])

もちろん、クライアントが 1 つしかない場合は、1 を返すのではなく、2 を返します (配列内にクライアント データの項目が 2 つあるため)。

任意のヒント?

4

2 に答える 2

2

$array['clients']数値インデックスのみを持っているかどうかを確認する必要があります。

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

または、 1 つの数値インデックスの存在を条件として使用します。

if (isset($array['clients'][0])) {
    return count($array['clients']);
} else {
    return 1;
}
于 2013-04-09T06:50:58.377 に答える
0

配列のような構造 (例のクライアントのコレクションなど) がある場合は、エントリが 1 つしかない場合でも、常にエントリにインデックスを付ける必要があります。

そうすれば、あなたが説明した問題で終わることはありません。

編集:
あなたのコメントを見ませんでした。最初に $array['clients'] にコンテンツがあるかどうかを確認できます (count() 経由)。
-> そうでない場合、cnt = 0。
次に、$array['clients']['0'] が定義されているかどうかを確認します。
-> 定義されていない場合、cnt = 1。
-> 定義されている場合、cnt = count()。

于 2013-04-09T06:50:05.870 に答える