2013-08-23 8 views
17

असल में, मेरे पास एक बहुआयामी सरणी है, और मुझे यह जांचने की ज़रूरत है कि यह खाली है या नहीं। कि if statement सक्रिय किया जा रहा है कि क्या बहुआयामी सरणी खाली है या नहीं है,कैसे जांचें कि एक बहुआयामी सरणी खाली है या नहीं?

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

हालांकि:

मैं वर्तमान में एक if बयान के साथ यह करने के लिए कोशिश कर रहा है।

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 
     ) 

) 

मेरे सरणी तत्व हमेशा से शुरू:

Array 
(
    [0] => Array 
     (
     ) 

) 

यह सरणी जब यह उस में कुछ तत्व है ऐसा दिखाई देता है:

यह सरणी की तरह जब खाली दिखता है 1, और नहीं 0. लंबी कहानी क्यों, और कोई सवाल नहीं बता रहा है क्योंकि यह इस प्रश्न के विषय से दूर है।

यदि आवश्यक हो, तो वह कोड है जो सरणी बना रहा है। इसे एक अपलोड की गई सीएसवी फ़ाइल से खींचा जा रहा है।

$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 (! खाली ($ csv_array [0])) 'कोशिश की? – Bora

+0

@ बोरा जो कभी भी निष्पादित नहीं होगा ... क्योंकि ओपी ने कहा कि इसकी ओ सूचकांक हमेशा खाली है ... –

+0

यदि आपकी फ़ाइल में खाली होने पर एक निश्चित प्रारूप है, तो आप फ़ाइल और उपयोग वाली खाली सरणी द्वारा आकार प्राप्त आकार पा सकते हैं यह जानना कि आपकी सरणी खाली है या नहीं? यह सिर्फ एक हैक-वाई विधि है, इस तरह के तरीके आप बॉक्स के बारे में सोचने के रूप में कहते हैं;) हालांकि इस विधि के लिए काम करने के लिए, आपको यह सुनिश्चित करना होगा कि जब भी सरणी है तो फ़ाइल सामग्री का आकार स्थिर रहता है खाली। :) –

उत्तर

12

तो बस जांचें कि पहली कुंजी सरणी में मौजूद है या नहीं।

उदाहरण

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

निश्चित रूप से इसके बारे में जाने का सबसे आसान तरीका। विश्वास नहीं कर सकता मैंने उस हाहा के बारे में नहीं सोचा था। धन्यवाद दोस्त! – Fizzix

+0

@fizzix हमेशा दोस्त का स्वागत करते हैं। –

+0

क्या होगा यदि चर सेट नहीं है? जो एक त्रुटि नोटिस फेंक सकता है। – EkoJR

-1

आप इस स्थिति से बचने के लिए array_push उपयोग कर सकते हैं,

$result_array = array(); 

array_push($result_array,$new_array);

उल्लेख array_push

तो फिर तुम यह मैं का उपयोग कर जाँच कर सकते हैं एफ (! खाली ($ result_array)) { }

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 
} 

नोट: यह, कोड अपने प्रश्न में पोस्ट के साथ काम करेंगे अगर आप सरणियों जो खाली था से एक के लिए एक और आयाम जोड़ा है, ऐसा नहीं है:

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

यह बेहतर जवाब है, अगर आपको नहीं पता कि आपका डेटा क्या है या सूचकांक क्या मौजूद हैं। धन्यवाद। – IamFace

0

आप बहुआयामी सरणी

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

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

     $empty = false; 
    }); 

    return $empty; 
} 

की संरचना नहीं जानते, तो बस ध्यान रखें सभी पत्र-गांठ पार्स किया जाएगा।

0

क्यों न केवल count() का उपयोग करें?

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

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

--- या ---

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

समाधान

प्रश्न इस मामले में, यदि सरणी गिनती 1. से अधिक

है तुम सब करने की है की जाँच कर रहा है
if (1 < count($example_arr)) { 
    // !empty(); 
} 
संबंधित मुद्दे