2013-08-23 12 views
17

基本的に、私は多次元配列を持っています。単純に空であるかどうかをチェックする必要があります。多次元配列が空であるかどうかをチェックする方法?

私は現在でこれをやろうとしifの文があります。

if(!empty($csv_array)) 
{ 
    //My code goes here if the array is not empty 
} 

if statementは多次元配列が空であるか否かが起動していること、が、が。

これが空の場合、配列は次のようになります。

Array 
(
    [0] => Array 
     (
     ) 

) 

これは、それはそれでいくつかの要素を持っている場合、配列は次のようになります。

Array 
(
    [0] => Array 
     (
     ) 

    [1] => Array 
     (
      [1] => question1 
      [2] => answer1 
      [3] => answer2 
      [4] => answer3 
      [5] => answer4 
     ) 

    [2] => Array 
     (
      [1] => question2 
      [2] => answer1 
      [3] => answer2 
      [4] => answer3 
      [5] => answer4 
     ) 

    [3] => Array 
     (
      [1] => question3 
      [2] => answer1 
      [3] => answer2 
      [4] => answer3 
      [5] => answer4 
     ) 

) 

マイ配列要素は常にで開始します1、そして0ではない。長いストーリーなぜ、そして何の説明もないので、この質問には話題にはならない。

必要に応じて、これが配列を作成するコードです。アップロードされたCSVファイルから取得されています。

$csv_array = array(array()); 
if (!empty($_FILES['upload_csv']['tmp_name'])) 
{ 
    $file = fopen($_FILES['upload_csv']['tmp_name'], 'r'); 
} 

if($file) 
{ 
    while (($line = fgetcsv($file)) !== FALSE) 
    { 
     $csv_array[] = array_combine(range(1, count($line)), array_values($line)); 
    } 

    fclose($file); 
} 

だから結論で、私は、配列が空であるかどうかを確認するために私のif statementを変更する必要があります。

ありがとうございます!

+0

'if(!empty($ csv_array [0]))'を試しましたか? – Bora

+0

@Boraは決して実行されません... OPはその空白のインデックスが常に空であると言っています... –

+0

ファイルが空のときは常に固定のフォーマットを持っていますが、ファイルを含む空の配列が占有するサイズがあり、あなたの配列が空であるかどうかを知るために? これはちょうどハック・yの方法ですが、このようなメソッドはそのままの状態で考えているものです) このメソッドを機能させるには、配列が空の。 :) –

答えて

12

したがって、最初のキーが配列に存在するかどうかを確認するだけです。あなたは、あなたが私を使用して、それを確認することができarray_push

を参照してください

$result_array = array(); 

array_push($result_array,$new_array);

、このような状況を回避するためにarray_push使用することができます

if(!empty($csv_array[1])) 
{ 
    //My code goes here if the array is not empty 
} 
+0

これについては、間違いなく最も簡単な方法です。私はそのハハを考えなかったとは信じられません。ありがとう! – Fizzix

+0

@fizzixはいつも大歓迎です。 –

+0

変数が設定されていない場合はどうなりますか?それはエラー通知を投げる可能性があります。 – EkoJR

0

空の行を削除するだけで保存したいのですか?配列が空であれば戻りたいですか?またはポジションが空であるリストが必要ですか?

これは単なる考えです。未検証 !!!

/** 
* multi array scan 
* 
* @param $array array 
* 
* @return bool 
*/ 
function scan_array($array = array()){ 
    if (empty($array)) return true; 

    foreach ($array as $sarray) { 
    if (empty($sarray)) return true; 
    } 

    return false; 
} 
21

アレイをフィルタリングすることができます。デフォルトでは、すべての空の値が削除されます。

$filtered = array_filter($csv_array); 
if (!empty($filtered)) { 
    // your code 
} 

注:それは空の場合は、あなただけチェックすることができますが、空だっアレイの1つに別の次元を追加した場合、これは、あなたの質問に投稿されたコードで動作します、それはないだろう。

あなたは多次元配列

public function isEmpty(array $array): bool 
{ 
    $empty = true; 

    array_walk_recursive($array, function ($leaf) use (&$empty) { 
     if ($leaf === [] || $leaf === '') { 
      return; 
     } 

     $empty = false; 
    }); 

    return $empty; 
} 

の構造がわからない場合は

$array = array(array()); // empty($filtered) = true; 
$array = array(array(array())); // empty($filtered) = false; 
+0

あなたのデータが何であるか、どのインデックスが存在するのかわからない場合は、これが良い答えです。ありがとう。 – IamFace

0

ただ、すべてのリーフノードが解析されますに注意してください。

0

count()を使用しないのはなぜですか?

$example_arr = array(); 
$example_arr = array(
    array('foo', 'bar') 
); 

if (0 < count($example_arr)) { 
    // !empty(); 
} 

--- OR ---

if (0 >= count($example_arr)) { 
    // empty(); 
} 

この場合

を質問へのソリューション、あなたがしなければならないすべては、配列数が1

以上であるかどうかをチェックです
if (1 < count($example_arr)) { 
    // !empty(); 
} 
関連する問題