2012-07-25 11 views
26

मैं सरणी के अंदर तत्व की संख्या को गिनने के साथ कैसे समतुल्य समतुल्य समझा सकता हूं? उदाहरण,PHP - विशिष्ट सरणी मानों को गिनें

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

कैसे मैं सीधे पता कर सकते हैं कि कितने "बेन" अंदर है?

उत्तर

64
$array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 
$counts = array_count_values($array); 
echo $counts['Ben']; 
+0

उत्तर देने के लिए धन्यवाद। :) –

+4

क्या सरणी बहुआयामी है? –

+3

@OkiErieRinaldi तो ओपी को प्रश्न को अद्यतन करने की आवश्यकता है। – James

5

उपयोग array_count_values() कार्य करते हैं।

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

http://php.net/manual/en/function.array-count-values.php

+0

मुझे पता है कि जो मुझे चाहिए वह नहीं देता है, यह उसी तत्व की सभी संख्या देता है –

+0

@ हाथीदांत सैंटोस क्या आप सुनिश्चित हैं कि यह विधि सहायक नहीं है ?? .. इस लिंक को जांचें http://codepad.org/ Ye2x8uQD – swapnesh

+0

@ हाथीदांत सैंटोस यह नहीं है कि आप वास्तव में क्या चाहते हैं? –

2

चेक array_count_values ​​कोशिश() फ़ंक्शन

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

उत्पादन।

$ countValues ​​= array_count_values ​​($ myArray);

echo $countValues["Ben"];

6

आप array_keys और गिनती के साथ ऐसा कर सकते हैं।

$array = array("blue", "red", "green", "blue", "blue"); 
echo count(array_keys($array, "blue")); 

आउटपुट:

3 
+0

यह सबसे अच्छा जवाब है क्योंकि यह सभी मूल्यों की सभी घटनाओं को गिनने के लिए php को परेशान नहीं करता है, यह केवल योग्यता कुंजी देता है और उन्हें गिना जाता है एक तरीका जो कभी भी 'नोटिस' नहीं फेंक देगा। दूसरे शब्दों में, 'गूंज गिनती (array_keys ($ array, "बैंगनी")); '' '' '' '' '' '' '' '' '' '' '' '' '' '' _ '() '+1 – mickmackusa

0

आप सरणी के अंदर सभी एक ही आवृत्तियां की गणना करना चाहते हैं, तो यहाँ एक समारोह उन सब को गिनती, और परिणाम एक बहु-आयामी सरणी के रूप में की जाती हैं:

function countSame($array) { 

$count = count($array); 
$storeArray = array(); 
while ($count > 0) { 
$count--; 

if ($array[$count]) { 
$a = $array[$count]; 
$counts = array_count_values($array); 
$counts = $counts[$a]; 
$tempArray = array($a, $counts); 
array_push($storeArray, $tempArray); 

$keys = array_keys($array, $a); 
foreach ($keys as $k) { 
unset($array[$k]); 
} //end of foreach ($keys as $k) 
} //end of if ($array[$count]) 

} //end of while ($count > 0) 

return $storeArray; 

} //end of function countSame($array) 
0
define('SEARCH_STRING', 'Ben'); 

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

$count = count(array_filter($myArray,function($value){return SEARCH_STRING === $value;})); 

echo $count, "\n"; 

आउटपुट:

3 
0

array_count_values केवल पूर्णांकों और तार के लिए काम करता है। आप नाव/संख्यात्मक मान के लिए मायने रखता है चाहता हूँ के लिए हो (और आप सटीक या प्रतिनिधित्व में छोटे बदलाव के असावधान हैं), तो यह काम करता है:

function arrayCountValues($arr) { 
    $vals = []; 
    foreach ($arr as $val) { array_push($vals,strval($val)); } 
    $cnts = array_count_values($vals); 
    arsort($cnts); 
    return $cnts; 
} 

ध्यान दें कि मैं तारों के रूप में कुंजी के साथ $cnts लौट आते हैं। उन्हें पुनर्स्थापित करना आसान होगा, लेकिन मैं मूल्यों के लिए मोड निर्धारित करने का प्रयास कर रहा हूं, इसलिए मुझे केवल पहले (कई) मानों को फिर से परिवर्तित करने की आवश्यकता है।

मैंने एक संस्करण का परीक्षण किया जो array_count_values का उपयोग करने के बजाय गणना की एक सरणी बना रहा, और यह अधिक कुशल (शायद 8-10% तक) हो गया!

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