在多维数组中搜索数字

时间:2015-04-30 09:03:19

标签: php arrays multidimensional-array

如何计算二维表中数字的次数?

代码示例:

array (size=3)
  0 => 
    array (size=7)
      0 => int 19
      1 => int 17
      2 => int 37
      3 => int 3
      4 => int 17
      5 => int 11
      6 => int 23
  1 => 
    array (size=7)
      0 => int 16
      1 => int 30
      2 => int 16
      3 => int 4
      4 => int 24
      5 => int 14
      6 => int 15
  2 => 
    array (size=7)
      0 => int 11
      1 => int 41
      2 => int 30
      3 => int 11
      4 => int 10
      5 => int 18
      6 => int 36

我正在尝试查找如何搜索表格中每个数字的次数。 这就是我得到的:

$arrayWeeknummer = array();

echo "<table>";
for ($i = 0; $i < 3; $i++)
{
    echo "<tr>";
    for($j = 0; $j < 7; $j++)
    {
        $arrayWeeknummer[$i][$j] = rand(1,42);
        echo "<td>".$arrayWeeknummer[$i][$j]."</td>";
    }
    echo "</tr>";
}
echo "</table>";

for($k = 0; $k < 42; $k++)
{
    $aantal = 0;
    $newArray[$k][0] = $k+1;

    if(array_search($k+1, $arrayWeeknummer))
    {
        $newArray[$k][1] = $aantal++;
    }

$newArray[$k][1] = $aantal;
}

不幸的是我在if(array_search)语句中做错了,因为它永远不会被调用。

3 个答案:

答案 0 :(得分:1)

这应该适合你:

这里我只用2个foreach循环遍历所有元素,然后检查该值是否已经在我的$result数组中,如果不是,我用0初始化它,然后每次在数组中递增它。

<?php

    $result = [];

    foreach($arr as $a){
        foreach($a as $v){
            if(!isset($result[$v]))
                $result[$v] = 0;
            $result[$v]++;
        }
    }

    print_r($result);

?>

或者如果你想使用array_walk_recursive(),就这样做:

$result = [];

array_walk_recursive($arr, function($v, $k)use(&$result){
    if(!isset($result[$v]))
        $result[$v] = 0;
    $result[$v]++;
});

答案 1 :(得分:0)

我要做的是使用1到42之间的键创建一个数组,并将值初始化为0.然后只需将for循环运行到另一个for循环中以查找您的每个值数组,只需将对应于数组中值的值从1增加到42。

编辑:似乎array_count_values()执行相同的操作

答案 2 :(得分:0)

<?php 

    $input = [
    [
            0 =>  19,
            1 =>  17,
            2 =>  37,
            3 =>  3,
            4 =>  17,
            5 =>  11,
            6 =>  23],
            [
            0 =>  45,
            1 =>  1,
            2 =>  17,
            3 =>  34,
            4 =>  18,
            5 =>  19,
            6 =>  26],
    ];

    $max = 0;

    foreach($input as $array) {
        $max = max(max($array), $max);
    }

    $result = array_fill (0, $max, 0);

    foreach($input as $array) {
        foreach($array as $number) {
            $result[$number]++;
        }
    } 

print_r($result);