次のような多次元配列があるとしましょう。
array(
array("Thing1","OtherThing1"),
array("Thing1","OtherThing2"),
array("Thing2","OtherThing3")
);
多次元配列に値「Thing1」が存在する回数をカウントするにはどうすればよいですか?
次のような多次元配列があるとしましょう。
array(
array("Thing1","OtherThing1"),
array("Thing1","OtherThing2"),
array("Thing2","OtherThing3")
);
多次元配列に値「Thing1」が存在する回数をカウントするにはどうすればよいですか?
array_search
詳細については、こちらのhttp://www.php.net/manual/en/function.array-search.phpを参照してください。
このコードは、phpドキュメントサンプルにあるこのサンプルです。
<?php
function recursiveArraySearchAll($haystack, $needle, $index = null)
{
$aIt = new RecursiveArrayIterator($haystack);
$it = new RecursiveIteratorIterator($aIt);
$resultkeys;
while($it->valid()) {
if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND (strpos($it->current(), $needle)!==false)) { //$it->current() == $needle
$resultkeys[]=$aIt->key(); //return $aIt->key();
}
$it->next();
}
return $resultkeys; // return all finding in an array
} ;
?>
針が干し草の山で複数回見つかった場合、最初に一致したキーが返されます。一致するすべての値のキーを返すには、array_keys()
代わりにオプションのsearch_valueパラメーターを使用します。
これを試して :
$arr =array(
array("Thing1","OtherThing1"),
array("Thing1","OtherThing2"),
array("Thing2","OtherThing3")
);
echo "<pre>";
$res = array_count_values(call_user_func_array('array_merge', $arr));
echo $res['Thing1'];
出力:
Array
(
[Thing1] => 2
[OtherThing1] => 1
[OtherThing2] => 1
[Thing2] => 1
[OtherThing3] => 1
)
各値の出現を示します。すなわち:Thing1
発生2
回数。
編集:OPのコメントによると:「どの配列が結果の配列を意味しますか?」-入力配列。たとえば、これは入力配列になります:array(array(1,1)、array(2,1)、array(3,2))、最初の値(1,2,3)のみをカウントしたい2番目の値ではありません(1,1,2)–gdscei7分前
$arr =array(
array("Thing1","OtherThing1"),
array("Thing1","OtherThing2"),
array("Thing2","OtherThing3")
);
$res = array_count_values(array_map(function($a){return $a[0];}, $arr));
echo $res['Thing1'];
function showCount($arr, $needle, $count=0)
{
// Check if $arr is array. Thx to Waygood
if(!is_array($arr)) return false;
foreach($arr as $k=>$v)
{
// if item is array do recursion
if(is_array($v))
{
$count = showCount($v, $needle, $count);
}
elseif($v == $needle){
$count++;
}
}
return $count;
}
使用すると次のin_array
ことが役立ちます。
$cont = 0;
//for each array inside the multidimensional one
foreach($multidimensional as $m){
if(in_array('Thing1', $m)){
$cont++;
}
}
echo $cont;
詳細については、http://php.net/manual/en/function.in-array.phpをご覧ください。
これを試して
$arr =array(
array("Thing1","OtherThing1"),
array("Thing1","OtherThing2"),
array("Thing2","OtherThing3")
);
$abc=array_count_values(call_user_func_array('array_merge', $arr));
echo $abc[Thing1];
$count = 0;
foreach($array as $key => $value)
{
if(in_array("Thing1", $value)) $count++;
}