2013-05-07 9 views
7

मेरे पास एक सहयोगी सरणी है जिसमें मुझे बूलियन सत्य मानों की संख्या गिनने की आवश्यकता है।एक बूलियन ऐरे में वास्तविक मानों की PHP गणना संख्या

अंतिम परिणाम एक if कथन बनाना है जिसमें सरणी के भीतर केवल एक वास्तविक मान मौजूद होने पर सत्य वापस आ जाएगा। अगर सरणी के भीतर एक और सही मान हैं, या सरणी के भीतर कोई वास्तविक मान नहीं है तो इसे झूठी वापसी की आवश्यकता होगी।

मुझे पता है कि किसी भी रूप में गिनती और in_array का उपयोग करने का सबसे अच्छा मार्ग होगा। मुझे यकीन नहीं है कि यह काम करेगा, सिर्फ मेरे सिर के ऊपर से, लेकिन अगर ऐसा होता है, तो यह सबसे अच्छा तरीका है?

$array(a->true,b->false,c->true)  

if (count(in_array(true,$array,true)) == 1) 
{ 
    return true 
} 
else 
{ 
    return false 
} 

उत्तर

26

मैं array_filter का उपयोग करूंगा।

$array = array(true, true, false, false); 
echo count(array_filter($array)); 
//outputs: 2 

http://codepad.viper-7.com/ntmPVY

Array_filter मूल्यों कि झूठे-y (मूल्य == गलत) कर रहे हैं निकाल देंगे। तो बस एक गिनती प्राप्त करें। यदि आपको कुछ विशेष मान के आधार पर फ़िल्टर करने की आवश्यकता है, जैसे कि यदि आप एक विशिष्ट मान की तलाश में हैं, तो array_filter एक वैकल्पिक दूसरा पैरामीटर स्वीकार करता है जो एक फ़ंक्शन है जिसे आप यह निर्धारित करने के लिए परिभाषित कर सकते हैं कि कोई मान सत्य है (फ़िल्टर नहीं किया गया है) या झूठा (फ़िल्टर किया गया है))।

+0

बिल्कुल सही, बिल्कुल मुझे जो चाहिए, धन्यवाद! – ThatTechGuy

0

इस तरह?

$trues = 0; 
foreach((array)$array as $arr) { 
    $trues += ($arr ? 1 : 0); 
} 
return ($trues==1); 
2

इस दृष्टिकोण का प्रयास करें:

<?php 
$array = array(1, "hello", 1, "world", "hello"); 
print_r(array_count_values($array)); 
?> 

परिणाम:

Array 
(
    [1] => 2 
    [hello] => 2 
    [world] => 1 
) 

Documentation

+1

यह तार/पूर्णांक के लिए काम करता है, हालांकि वे बूलियन मानों की तलाश में हैं। तो यह प्रत्येक तत्व के लिए एक स्ट्रिंग/int नहीं के लिए एक E_WARNING फेंक देगा। उदाहरण: http://codepad.viper-7.com/zPTF0U –

0

आप array_count_values का उपयोग कर गिना सब कुछ के साथ एक सरणी प्राप्त करने की कोशिश की है? फिर जांचें कि कितने सच हैं?

+0

यह बूलियन मानों के लिए काम नहीं करेगा, केवल स्ट्रिंग और पूर्णांक। – Mark

7

सही के बाद से 1 करने के लिए casted है और असत्य को 0 पर casted है तुम भी array_sum

$array = array('a'=>true,'b'=>false,'c'=>true); 
if(array_sum($array) == 1) { 
    //one and only one true in the array 
} 

उपयोग कर सकते हैं doc से: (एक) "FALSE 0 (शून्य) निकलेगा, और TRUE 1 निकलेगा । "

+0

यह भी वैसे ही काम करेगा, प्रावधान के लिए धन्यवाद! – ThatTechGuy

+1

यह वास्तव में एक सुंदर चालाक समाधान है। कुडोस! – lgomezma

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