配列に複数の要素があるかどうかを確認するより良い方法はどれですか?


177

配列に複数の要素があるかどうかを確認するだけです。私はそれをこのようにしようとしています:

if (isset($arr['1']))

他の伝統的な方法は

if (sizeof($arr)>1)

どちらが良いですか?そのような状況では、2つの代替方法をどのように判断すればよいですか?どちらが優れているかを測定するために使用できるパフォーマンスチェックメーターはありますか?


ここでの仮定は、$ arrがすでに配列に対して検証されていることです!つまり、このif条件チェックに入る前に、すでに配列かどうかがチェックされています。
tuxnani 2012

回答:


342

これを使って

if (sizeof($arr) > 1) {
     ....
}

または

if (count($arr) > 1) {
     ....
}

sizeof()のエイリアスですcount()。これらは同じように機能します。

編集: 質問の2番目の部分に答える:質問の2行のコードは代替方法ではなく、異なる機能を実行します。1つ目はatの値$arr['1']が設定されているかどうかをチェックし、2つ目は配列の要素数を返します。


8
@NB:質問が編集されました。最初のコードはでしたがif (sizeof($arr))、これは次のように変換されます。if (sizeof($arr) == 1)明らかに、配列に複数の要素があるかどうかはチェックされません。この答えは正解であり、私は反対票を投じる理由がないので、私は反対票を投じます。
Alix Axel

2
私は質問の元のバージョンを見ていないことを認めます。この回答は返信です。状況は異なりますが、答えが間違っているとラベル付けしたことをお詫び申し上げます。元の質問を見れば、間違いではありません。編集された質問には良くない。
NB

質問の2番目のコードスニペットは、$ arr ['1']の値が設定されているかどうかをチェックします。カウントは関係ありません。これは回答で扱われていませんでした。私がこれについて言及し、回答の作成者が回答を更新してくれることを願っています:)
Anders M.

@AndersM。それを指摘してくれてありがとう。私はそれを答えに反映しました。
ちぶぞ2014

私は次のようなものはありません:<pre> <code> for index in 0 .. <3 {guard let testTop:Prediciton = topPredictions [index] else {// your default object} predictResult.append(testTop)} </ code> < / pre> in swift 4
Alex22

44

if(is_array($arr) && count($arr) > 1)

$ arrが本当に配列であることを確認するだけです。

sizeofのエイリアスですcount。私はcountを使用することを好みます。

  1. 入力する1文字少ない
  2. 一目でsizeofは、メモリの観点から配列のサイズを意味するかもしれませんが、技術的すぎる:(

@AlixAxelうーん、$ arrが文字列の場合、count($ arr)はその文字列の文字数を返すので、そうです
Andreas Wong

いいえ、$arr文字列の場合はを返し1ます。
Alix Axel

12
マニュアルより:varの要素数を返します。varが配列またはCountableインターフェースが実装されたオブジェクトでない場合、1が返されます。例外が1つあります。varがNULLの場合、0が返されます。
Alix Axel

@AlixAxelああ、わかった...わあ、ありがとう、知らなかった:o ...いずれにせよ、OPが文字列と配列を区別したい場合に備えて(サイズに関係なく)そのままにしておきます。そのアウト:)
アンドレアス・ウォン

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()のエイリアスですcount()。どちらも非配列でも機能しますが、引数が配列またはCountableオブジェクトのいずれかである場合にのみ1より大きい値を返すため、これでかなり安全です。


6

明らかにcount($arr) > 1(はのsizeofエイリアスですcount)を使用するのが最善の解決策です。配列の構造によっては、要素が大量にあるが要素がない場合があり$array['1']ます。



6

私が好むcount()機能を代わりのsizeOf()ようsizeOf()にエイリアスのみでcount()、他の多くの言語で同じことを意味するものではありません。多くのプログラマはsizeof()、割り当てられたメモリの量を返すことを期待しています。


1
ここでも説明します。 stackoverflow.com/questions/3974385/php-array-count-or-sizeof この質問は今、Googleがヒットのトップであるので、これは貴重ですsizeofcount
ティム・オグルヴィ

4

配列をチェックするには、empty()がsizeof()よりも優れています。

配列に大量のデータが含まれている場合。配列のサイズを数えるには、さらに時間がかかります。しかし、空のチェックは常に簡単です。

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';

3

isset()は、変数が設定されているかどうかのみをチェックします。サイズや配列に含まれるものとは関係ありません。


2

$ arrは配列だと思います、これがあなたが探しているものです

if ( sizeof($arr) > 1) ...

1

最初の方法 if (isset($arr['1'])) は、連想配列では機能しません。

たとえば、次のコードは「いいえ、1つ以下」を表示します。

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}

0

私はSwift 4/5で配列のループを行い、それに応じてデフォルトを満たします

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.