我想要一种简单的方法来计算字符串“Apple”在给定的
中出现的次数# My Array :
$arr = array(
1 => "Apple",
2 => "Orange",
3 => array(1=>"Bananna",2=>"Apple"),
4 => "Grape",
5 => "Apple",
6 => array(1=>"Grape"),
7 => "Orange");
# Want to count only "Apple"
$needle = "Apple";
# My Function :
function arrsearch($needle,$haystack,$return) {
if(!is_array($haystack)) {
return false;
}
foreach($haystack as $key=>$val) {
if(is_array($val)) {
$return = arrsearch($needle,$val,$return);
}else if(strtolower($val) == strtolower($needle)) {
$return[] = $key;
}
}
return $return;
}
$var = arrsearch("Apple",$arr,array());
echo " Output : ".count($var);
# Output : 3
我使用上面的函数来查找数组中字符串“Apple”的次数。建议我最好的。
答案 0 :(得分:8)
您可以使用array_walk_recursive
:
function search_for($arr, $term)
{
$count = 0;
array_walk_recursive($arr, function($item, $idx, $term) use (&$count) {
if (false !== stripos($item, $term)) {
++$count;
}
}, $term);
return $count;
}
search_for($arr, 'Apple'); // returns 3
表达式function($item, $idx, $term) use (&$count) { .. }
是anonymous function声明;它就像常规函数一样工作,但是如果你需要修改它,你可以使用use ($var)
或use (&$var)
从父作用域继承变量。更多示例可以在手册页上找到。
<强>更新强>
对于PHP的版本&lt; 5.3,你必须使用对象来封装计数器:
class RecursiveArraySearcher
{
private $c = 0;
public static function find($arr, $term)
{
$obj = new self;
array_walk_recursive($arr, array($obj, 'ismatch'), $term);
return $obj->c;
}
public function ismatch($item, $key, $term)
{
if (false !== stripos($item, $term)) {
++$this->c;
}
}
}
echo RecursiveArraySearcher::find($arr, 'Apple'); // 3
答案 1 :(得分:2)
另一个解决方案是平整数组并计算值:
<?php
function search_for($arr, $term) {
$flatten_array = array();
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach($it as $v) {
$flatten_array[] = $v;
}
$count_values = array_count_values($flatten_array);
return $count_values[$term];
}
echo search_for($arr, 'Apple'); // print 3
答案 2 :(得分:2)
您可以使用这样的递归函数..
function finditem($item,$array){
$count = 0;
foreach($array as $key => $value){
if(is_array($value) == true){
$countx = finditem($item,$value);
$count = $count + $countx;
}else if($value == $item)
$count++;
}
return $count;
}
echo finditem("Apple",$arr);
希望它有所帮助。