0

我有一个数组数组,每个数组都包含医疗设备扫描的详细信息。我从每晚转储的文本日志中获取这些数据。其格式是这样的:

$this->scans = array(
  array(  
    'patientid' => (int),
    'patientname' => 'John Skeet',
    'reviewed' => 0 or 1
     //plus more irrelevant
  ),
  array(
    //same as above
  ), //etc
)

这里重要的数组键是reviewed,因为如果每个扫描质量足够高,则可以对其进行审查。但是,文本日志会转储获取的每个扫描,然后返回并重新列出已查看的扫描。

现在为了防止重复,我想我可以只使用 anarray_filter来过滤已获取和审查的扫描(保留审查的版本)。但是,过滤器功能会过滤掉整个数组(在极少数情况下除外)。如果有人可以看看并让我知道他们为什么认为它正在发生,那将不胜感激。

$this->scans = array_filter($this->scans, array($this, "scan_cleanup"));

.

private function scan_cleanup($scan) {
        //only if the scan was not reviewed
    if ($scan['reviewed'] == 0) {
                //change reviewed status to see if there is a duplicate
        $scan['reviewed'] == 1;
                //return false to remove this copy (and keep reviewed)
        if (in_array($scan, $this->scans)) {
            return false;
        }
    }
    return true;

}
4

2 回答 2

2
$scan['reviewed'] == 1;

对比

$scan['reviewed'] = 1;

一个是有条件的,在这种情况下什么都不做,另一个不存在。

你也不return false经常跑步。我会通过一点重构(提取条件检查)稍微改变逻辑以使其更清晰,更简单。

if ($scan['reviewed'] and hasDupe($scan)) {
   return false;  // filter out
}
return true; // it is passed back, and is output

hasDupe() 对重复记录进行最好的检查并返回真/假。

于 2009-06-02T18:11:29.467 回答
1

据我所知,“==”与“=”的简单案例。

$scan['reviewed'] = 1;

这应该可以解决问题。有时最简单的问题是最难发现的;-)

于 2009-06-02T18:17:47.257 回答