2016-09-18 3 views
1

Check PHP配列が空ですか?私は以下のようなPHPの配列が生じています

echo '<pre>', print_r($empData[$employee]['banks']).'</pre>'; 
Array 
(
    [0] => Array 
     (
      [bank_name] => [] 
      [bank_code] => 
      [branch] => 
      [account_number] => 
      [account_type] => 
     ) 

) 

今、私がチェックする必要があり、このbank arrayは空きません。つまり、すべてのインデックスに値が必要です。

$proceed = false; 
foreach ($empData[$employee]['banks'] as $key) { 

    echo '<pre>', print_r($key).'</pre>'; 

    foreach ($key as $k => $v) {        
    if (empty($empData[$employee]['banks'][$k])){ 
     $proceed = true; 
     break; 
    }        
    } 
} 

if(!$proceed) { 
    echo 'This array is empty'; 
} 
else { 
    echo 'This array is not empty'; 
} 

しかし、その私のために働いていない:

これは、私はそれを試してみました方法です。配列が空でない場合でも、常にその部分に移動します。

UPDATE:

$proceed = false; 
foreach ($empData[$employee]['banks'] as $bank) { 
    if (!array_filter($bank)) { 
     $proceed = true; 
     break; 
    } 
} 

if($proceed) { 
echo 'This array is empty'; 
} 
else { 
echo 'This array is not empty'; 
} 

ARRAY1:その空ではありません。しかし、出力はIts not emptyと言います。だからOK

This array is not empty 

Array 
(
    [0] => Array 
     (
      [bank_name] => Bank Name 
      [bank_code] => 7083 
      [branch] => Branch Name 
      [account_number] => 234234324242 
      [account_type] => NRFC 
     ) 

) 

Array2:それは空です。しかし、出力はIts not emptyと言います。だから間違っている

This array is not empty 

Array 
(
    [0] => Array 
     (
      [bank_name] => [] 
      [bank_code] => 
      [branch] => 
      [account_number] => 
      [account_type] => 
     ) 

) 

誰かが私を助けてくれることを願っています。空の配列の場合

+0

'empty($ v)'または 'empty($ key [$ k])'を使用するのではなく、配列内のパスを完全修飾するのはなぜですか? – SOFe

+0

空の条件が真であれば、 '$ proceed'がtrueに設定されます。なぜ 'if(!proceed)'の配列が代わりに空であるのですか? – SOFe

+1

私はそれを正しく読んでいれば、配列が空であるがif文の中にあるならば、$をtrueに設定しています。空であることをエコーするために$がfalseになることを期待しています。しかし、私は間違っている可能性があります – gavgrif

答えて

1

EDIT:

あなたの質問は数回更新されました。 の値のうちのいずれかが入力されていない場合は、$bankを「空」と見なすことができます。の場合はすべての値が関数に一致する場合は、元の回答がtrueになります。これに対応するために必要なものは、わずかに異なる関数array_someです。最初の例で

function array_some(callable $f, array $xs) { 
    foreach (array_values($xs) as $x) 
    if (call_user_func($f, $x)) 
     return true; 
    return false; 
} 

$input = [ 
    [ 
    'bank_name' => [], 
    'bank_code' => null, 
    'branch' => null, 
    'account_number' => null, 
    'accout_type' => null 
    ], 
    [ 
    'bank_name' => ['foobar'], 
    'bank_code' => 123, 
    'branch' => null, 
    'account_number' => null, 
    'accout_type' => null 
    ], 
    [ 
    'bank_name' => 'Bank Name', 
    'bank_code' => 7083, 
    'branch' => 'Branch Name', 
    'account_number' => '234234324242', 
    'accout_type' => 'NRFC' 
    ] 
]; 

function is_empty($x) { return empty($x); } 

foreach ($input as $bank) { 
    $proceed = array_some('is_empty', $bank); 
    echo 'proceed:', json_encode($proceed), PHP_EOL; 
} 

// proceed:true 
// proceed:true 
// proceed:false 
  • 一部フィールドがそう$proceedは、第2の例でtrue
  • 一部フィールドが空になり、空であるので、$proceedtrue
  • であろう3番目の例のすべてのフィールドは空ではありません$proceedfalse

https://repl.it/DcCW


ORIGINAL ANSWER:

あなたが探しているものはarray_every機能です。簡単な例を見てみましょう:

function array_every(callable $f, array $xs) { 
    foreach (array_values($xs) as $x) 
    if (!call_user_func($f, $x)) 
     return false; 
    return true; 
} 

function even($x) { return $x % 2 === 0; } 

echo "even:", json_encode(array_every('even', [1,2,3])), PHP_EOL; // false 
echo "even:", json_encode(array_every('even', [2,4,6])), PHP_EOL; // true 

https://repl.it/DcCZ

  • 最初の例では

    12、および3はすべてevenないので、出力はです。第2の例で

  • 24、及び6は全てevenあるので、出力はあります。


配列値のすべては、emptyあり、今度はあなたのデータを最初の例のデータで

function array_every(callable $f, array $xs) { 
    foreach (array_values($xs) as $x) 
    if (!call_user_func($f, $x)) 
     return false; 
    return true; 
} 

$input = [ 
    [ 
    'bank_name' => [], 
    'bank_code' => null, 
    'branch' => null, 
    'account_number' => null, 
    'accout_type' => null 
    ], 
    [ 
    'bank_name' => ['foobar'], 
    'bank_code' => 123, 
    'branch' => null, 
    'account_number' => null, 
    'accout_type' => null 
    ] 
]; 

function is_empty($x) { return empty($x); } 

foreach ($input as $bank) { 
    $proceed = array_every('is_empty', $bank); 
    echo 'proceed:', json_encode($proceed), PHP_EOL; 
} 

// proceed:true 
// proceed:false 

https://repl.it/DcCX

  • それを見てみましょう従って$proceedtrueとなります。値の第2の例で

  • 一部が(非empty)であり、従って$proceedfalseであろう。

注:is a language construct and not a functionemptyので、それは変数の関数を使用して呼び出すことはできません。 - これが、array_every('empty', ...)を使用する代わりに、再利用可能なis_empty関数を定義した理由です。これはうまくいきません。

+0

ありがとうございます。私は高く評価しました。 – user3733831

+0

@ user3733831大歓迎です。 – naomik

-1

Array ([Tags] => SimpleXMLElement Object ([0] =>)) 

非空の場合:

Array ([Tags] => SimpleXMLElement Object ([0] =>,[1] => "s")) 
0

あなたは余分なループを実行する必要はありません。バンク配列内のすべてのフィールドが空であるかどうかを確認するには、array_filter()関数を使用します。

array_filter()コールバック関数に渡す配列内の各値を超える反復処理。

コールバック関数がtrueを返すと、arrayの現在の値が結果配列に返されます。配列キーは保持されます。

foreach ($empData[$employee]['banks'] as $bank) { 
    if (!array_filter($bank)) { 
     $proceed = true; 
     break; 
    } 
} 
+0

答えてくれてありがとうございました。配列が空のときに$ proceedをtrueに設定していますので、空の場合は空、空でない場合はif($ proceed)を指定します – user3733831

+0

これはあなたの$ proceed if else conditionが間違っているからです。これはあなたのコメントにしたがって試しましたが、私のために働いていませんでした。 –

+0

コードで質問を更新しました。 – user3733831

0
<?php 
$arr = [ 
    'name' => 'stephen', 
    'age' => 22, 
    'number' => '1' 
]; 

$proceed = false; // false->not empty true->empty 
foreach ($arr as $v) { 
    if (empty($v)){ 
     $proceed = true; 
     break; 
    } 
} 

if ($proceed) { // Be attention there 
    echo 'This array is empty'; 
} else { 
    echo 'This array is not empty'; 
} 
-1
$proceed = false; 
foreach ($empData[$employee]['banks'] as $key) { 

    echo '<pre>', print_r($key).'</pre>'; 

    foreach ($key as $k => $v) {        
    if (!empty($empData[$employee]['banks'][$k])){ 

    $proceed = true; 
    } else{ 
    $proceed = false; 
    break; 
    }    
    } 
} 

if($proceed) { 
    echo 'This array is empty'; 
} 
else { 
    echo 'This array is not empty'; 
} 

、これをチェックし、それはあなたのために役に立つかもしれませ。

+0

空配列の場合は 'この配列は空ではありません。 ' – user3733831

0

あなたはarray_walk_recursive

配列の各要素にユーザ定義のコールバック関数を適用を使用することができます。この関数は、より深い配列に再帰します。 注:コールバックは、アレイの実際の値を操作する必要がある場合

  • 、 を基準として、コールバックの最初のパラメータを指定します。これらの要素に対して行われた の変更は、元の配列 自体で行われます。
あなたも 空の配列でデモhereを確認することができます

を参照してください編集**demo2 **

CODE:

function empty_recursive($value) { 
    if(is_array($value)) { 
     $empty = true; 
     array_walk_recursive($value, function($item) use (&$empty) { 
      $empty = $empty && empty($item); 
     }); 
    } 
    else { 
     $empty = empty($value); 
    } 
    return $empty; 
} 

echo "<h1>WITH empty Array</h1>+++++++++++++++++"; 
$array1 = array(
    array(
     "bank_name"  => [], 
     "bank_code"  => '', 
     "branch"   => "", 
     "account_number" => "", 
     "account_type" => "" 
    ) 
); 
echo empty_recursive($array1) == true ? 'This array is empty' : 'This array is not empty, you may proceed'; 
echo '---------------------------------------------------------------------------------+'; 
echo "<br><h1>WITH filled Array</h1>"; 
$array2 = array(
    array(
     "bank_name"  => "Bank Name", 
     "bank_code"  => '12', 
     "branch"   => "22", 
     "account_number" => "32", 
     "account_type" => "23" 
    ) 
); 
echo empty_recursive($array2) == true ? 'This array is empty' : 'This array is not empty, you may proceed'; 
+0

また、'この配列は空ではありません。両方の配列で処理できます。'デモリンクもチェックしてください。 – user3733831

+0

編集デモ2をご覧ください:) – Noman

関連する問題