1

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

开始

$raw = array(
  [0] => ("day" => "2013-01-01", "delay" => 3),
  [1] => ("day" => "2013-01-01", "delay" => 16),
  [2] => ("day" => "2013-01-01", "delay" => 0),
  [3] => ("day" => "2013-01-02", "delay" => 1),
  [4] => ("day" => "2013-01-02", "delay" => 0),
  [5] => ("day" => "2013-01-03", "delay" => 9),
);

结果

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']]++
  }
}
4

2 回答 2

0

你可以使用 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 - 如果您需要最终数组中的所有天,则需要第一个,如果您只需要唯一的天并且不需要警告,则需要第二个

于 2013-10-14T22:36:48.467 回答
0

这是一种可能的方法:

$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);

测试

$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 ) )
于 2013-10-14T22:45:27.933 回答