1

PHP 5.3 の empty() 関数は、連想配列に対してうまく機能しません。30 個以上の要素を持つ連想配列があります。

$arr = array(
             'one'=>kwara, 
             'two'=>osun,
             ...
             'thirty'=>lagos
            )

連想配列が次のように空の場合:

$arr = array(
             'one'=>'', 
             'two'=>'',
             ...
             'thirty'=>''
            )

配列が空かどうかを確認する必要があります。以下はphp 5.3では機能しません。

if(empty($arr))
{
  echo "array is empty<br />>";
}
else
{
  echo "array is NOT empty<br />";
}

「配列は空ではありません」を返します。PHP 5.4では動作が異なることは認識していますが、現在のプラットフォームは php 5.3 です。

この問題を克服するために、私は以下を使用しました。

if(strlen(implode('',array_values($arr))) > 0)       
{

 echo "array is NOT empty<br />>";
}
else
{
  echo "array is empty<br />";
}

問題は、php 5.3でこれを達成するより良い方法はありますか?

4

3 に答える 3

2

簡単な答え:いいえ

長い答え:あなたが見ている配列はまったく空ではなく、長さゼロの文字列を持つキーの束が含まれています。あなたの解決策はおそらく可能な限り最短読みやすいものの1つです。ただし、独自の関数でラップすることをお勧めします。

于 2012-11-12T09:24:08.353 に答える
2

やってみました:

if (sizeof(array_filter($array)) === 0) // do your stuff

また、オリジナルは次のように改善できます。

if (implode($array) !== '') // do your stuff
于 2012-11-12T09:23:22.773 に答える
0

Empty は本当に空の値でのみ機能します。配列にはキーが割り当てられているため、空ではありません。あなたのソリューションは、おそらくあなたが望むことを行うための最良の方法です-言うのは難しいです.いくつかのベンチマークを作成する必要があります.それは他の多くの方法で行うことができます:

if (array_filter($arr) === array()) {}
// or
if (!implode('', $arr)) {}
于 2012-11-12T09:28:22.010 に答える