Como posso contar o número de um determinado valor de um array multidimensional? Por exemplo:
array(
array ("stack" => "1")
array ("stack" => "1")
array ("stack" => "1")
array ("stack" => "1")
array ("stack" => "2")
array ("stack" => "2")
)
Neste exemplo, o resultado deve ser:
pilha == 1 => 4 correspondências
stack == 2 => 2 correspondências
Respostas:
1 para resposta № 1Você teria que fazer um loop por conta própria:
$counts = array();
foreach( $array as $value) {
foreach( $value as $k => $v) {
if( !isset( $counts[$k])) $counts[$k] = array();
if( !isset( $counts[$k][$v])) $counts[$k][$v] = 0;
$counts[$k][$v] += 1;
}
}
foreach( $counts as $k => $v1)
foreach( $v1 as $v => $count)
echo "$k == $v => $count matchesn";
este vai imprimir:
stack == 1 => 4 matches
stack == 2 => 2 matches
1 para resposta № 2
$occur = array();
foreach ($array as $item) {
foreach ($item as $k => $v) {
$occur["$k == $v"]++;
}
}
1 para resposta № 3
Como Ray diz, dada sua estrutura de dados, sua única opção é percorrer toda a matriz e contar conforme você avança.
Se você está preocupado com o desempenho, você podedeseja considerar o uso de uma estrutura de dados diferente (talvez ao lado da matriz). A segunda estrutura de dados seria algo como um hash que toma os valores da matriz como chaves e contém uma contagem contínua que você pode construir enquanto você está construindo a matriz.
Dessa forma, você obtém um desempenho mínimo, em vez de ter que reiterar tudo novamente.
1 para resposta № 4
Você precisou de alguma modificação, mas isso será útil para você
<?php
function array_count_values_of($value, $array) {
$counts = array_count_values($array);
return $counts[$value];
}
$array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);
$array2 = array_unique($array);
for($i=0 ; $i<count($array2) ; $i++)
{
$temp = array_count_values_of($array2[$i], $array);
$result[$i][0] = $array2[$i];
$result[$i][1] = $temp;
}
print_r($result);
?>
0 para a resposta № 5
Eu simplesmente passaria por ele e enviaria os resultados para uma nova matriz de resultados (mas eu não vou codificá-lo para você).
Você pode fazer coisas mais complexas como usar array_walk / array_filter com uma função de retorno de chamada para processá-lo ... mas isso pode ser menos eficiente.
veja este post: Contagem Multidimensional de Matrizes PHP