Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用嵌套数组创建唯一键和计数值_Php_Arrays - Fatal编程技术网

Php 使用嵌套数组创建唯一键和计数值

Php 使用嵌套数组创建唯一键和计数值,php,arrays,Php,Arrays,在PHP中,我想构造一个数组,每行使用不同的$raw['day'],并计算所有大于0的$raw['delay']: 开始 结果 array( [0] => ("day" => "2013-01-01", "misses" => 2), [1] => ("day" => "2013-01-02", "misses" => 1), [2] => ("day" => "2013-01-02", "misses" => 1), ) 我所

在PHP中,我想构造一个数组,每行使用不同的$raw['day'],并计算所有大于0的$raw['delay']:

开始

结果

array(
  [0] => ("day" => "2013-01-01", "misses" => 2),
  [1] => ("day" => "2013-01-02", "misses" => 1),
  [2] => ("day" => "2013-01-02", "misses" => 1),
)
我所尝试的:

我想首先我会得到所有独特的日子:

$all_days = array_column($raw, 'day');
$unique_days = array_unique($all_days);
现在我已经有了所有独特的日子,我可以再次循环$raw并增加未命中数。但这似乎过于冗长,我认为在PHP的数组函数中有一个更简单的解决方案

foreach ($raw as $row) {
  if ($row['delay'] > 0) {
    $unique_days[$row['day']]++
  }
}

您可以使用array_walk函数,但我想您唯一需要的是:

    $unique_days = array();
    foreach ($raw as $row) {
if (!isset($unique_days[$row['day']])) $unique_days[$row['day']] = 0; -- place 1
      if ($row['delay'] > 0) {
if (!isset($unique_days[$row['day']])) $unique_days[$row['day']] = 0; -- place 2
        $unique_days[$row['day']]++
      }
    }
它将只存储具有适当计数器的唯一天数


更新检查位置1和2-如果您需要最终阵列中的所有天数,则需要第一个,如果您只需要唯一的天数并且不需要警告,则需要第二个。这是一种可能的方法:

$sum=array();
foreach ($raw as $r) {
    if ($r["delay"]>0) $sum[$r["day"]]++;
}
然后

foreach ($a as $k => $v) {
 $sum[]=array("day"=>$k, "misses" => $v);
}
print_r($sum);
测验
你只是复制粘贴了有问题的代码,没有添加任何新的内容。@AmalMurali你错了,我添加了一行,并解释了其他电话不需要如此可爱,让人们在没有任何反馈的情况下投票。谢谢你们,对不起,不是我。。。向上投票:P我会看看这个谢谢你的发帖!
foreach ($a as $k => $v) {
 $sum[]=array("day"=>$k, "misses" => $v);
}
print_r($sum);
$raw = array(
  0 => array("day" => "2013-01-01", "delay" => 3),
  1 => array("day" => "2013-01-01", "delay" => 16),
  2 => array("day" => "2013-01-01", "delay" => 0),
  3 => array("day" => "2013-01-02", "delay" => 1),
  4 => array("day" => "2013-01-02", "delay" => 0),
  5 => array("day" => "2013-01-03", "delay" => 9),
);
$a=array();
foreach ($raw as $r) {
    if ($r["delay"]>0) {$a[$r["day"]]++;}
}

foreach ($a as $k => $v) {
print "$k = $v<br>";
}

foreach ($a as $k => $v) {
 $sum[]=array("day"=>$k, "misses" => $v);
}
print_r($sum);
Array (
 [0] => Array ( [day] => 2013-01-01 [misses] => 2 )
 [1] => Array ( [day] => 2013-01-02 [misses] => 1 )
 [2] => Array ( [day] => 2013-01-03 [misses] => 1 ) )