2013-05-29 12 views
14
$cartProducts = explode(',', $prodID); 
echo count($cartProducts) 

var_dump ($ cartProducts) का आउटपुट; है:गिनती (सरणी) 1 लौटाती है लेकिन सरणी खाली है

`array(1) { [0]=> string(0) "" } 

यह मुझे 1 का $ गिनती मान देता है लेकिन सरणी खाली है, या कम से कम मेरा डेटाबेस कॉलम खाली है।

if(empty($cartProducts)){ 
echo '0'; 
} else{ 
$count = count($cartProducts); 
} 

लेकिन मैं एक ही परिणाम प्राप्त: $ गिनती = 1

भगवान क्या मैं यहाँ याद आ रही है

मैं निम्नलिखित की कोशिश की?

+7

यह एक खाली सरणी नहीं है; यह एक तत्व के साथ एक सरणी है - भले ही वह तत्व एक खाली स्ट्रिंग है, फिर भी यह एक तत्व है –

+0

आपके पास एक सरणी तत्व है, लेकिन यह खाली है। $ प्रोडिड कैसा दिखता है? –

+0

विस्फोट करने से पहले $ prodid का मूल्य दिखाएं() –

उत्तर

19

आप array_filter() इस्तेमाल कर सकते हैं:

echo count(array_filter($cartProducts, 'strlen')); 

यह strlen() का उपयोग करता है तय करने के लिए सरणी तत्व "खाली" है, array_filter पर दूसरे तर्क के बिना यह '0' को खाली के रूप में भी इलाज करेगा।

और भी बेहतर

array_filter() का उपयोग करना बहुत सामान्य है; आपके मामले में, अगर $prodID कोई रिक्त स्ट्रिंग है, यह बेहतर हो, उदा, पहले strlen($prodId) के लिए जाँच करने के लिए, .:

echo strlen($prodId) ? count(explode(',', $prodId)) : 0; 
+0

बहुत बढ़िया, बहुत बहुत धन्यवाद। मेरे उदाहरण में आवश्यक दूसरे दूसरे तर्क की आवश्यकता नहीं है। – Grant

+0

@ ग्रांट यह सटीक होना बेहतर है :) मेरे उत्तर के दूसरे भाग में आपको बेहतर सेवा देना चाहिए हालांकि इमो। –

+0

समझ गया, धन्यवाद, आपके उत्तर का दूसरा भाग एक और अधिक सुरुचिपूर्ण समाधान है। – Grant

7

सरणी खाली नहीं है जाएगा। इसमें एक तत्व है जिसमें एक स्ट्रिंग है जो लंबाई में 0 है।

count(array_filter($array)); 

आप array_filter() करने के लिए एक दूसरा पैरामीटर पारित करने के लिए है, क्योंकि कोई रिक्त स्ट्रिंग (हटाया जा और इसलिए) गलत पर मूल्यांकन करेंगे जरूरत नहीं है।

+4

"एक खाली स्ट्रिंग का मूल्यांकन गलत होगा" ...तो '0" 'होगा, लेकिन मैं उस खाली स्ट्रिंग पर विचार नहीं करूंगा। –

+1

+1 @jack बहुत सच –

0

PREG_SPLIT_NO_EMPTY ध्वज के साथ आप preg_split का उपयोग कर सकते हैं। इस तरह आप रिक्त स्ट्रिंग नहीं मिलेगा:

$cartProducts = preg_split("/,/", $prodID, NULL, PREG_SPLIT_NO_EMPTY); 
1

आप इस तरह अपने कोड लिख सकते हैं:

$cartProducts = strlen($prodID) ? explode(",", $prodID) : array(); 
echo count($cartProducts); 
3

आपका/और गलत चर फैल जाती है। आप $prodId का परीक्षण करना चाहिए:

if($prodID === ''){ 
    $count = 0; 
} else{ 
    $count = count(explode(',', $prodID)); 
} 

explode() तार से मिलकर एक सरणी वापस जाने के लिए गारंटी है, तो मूल रूप से यह विज्ञापित बस के रूप में जो एक अच्छी बात है, काम करता है।

+0

आह हाँ, अब मैं इसे देखता हूं। बहुत बहुत धन्यवाद। – Grant

संबंधित मुद्दे