微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php foreach 循环只从数组中给出 1 个结果

如何解决php foreach 循环只从数组中给出 1 个结果

我有一个 csv file 包含要在项目中显示的商店的属性(id、名称、类别、特色等)。现在,我需要显示条件为 'featured'='TRUE' 的特色商店数组。有10 results

这是读取文件并将数据保存为关联数组的代码

  function read_all_stores() {
  $file_name = 'csv_files/stores.csv';
  $fp = fopen($file_name,'r');
  $first = fgetcsv($fp); // get the first row aka headlines of the file
  $stores = [];
  while ($row = fgetcsv($fp)) {
    $i = 0;
    $store = [];
    foreach ($first as $col_name) {
      $store[$col_name] =  $row[$i];
      $i++;
    }
    $stores[] = $store;
  }
  return $stores;
}

sample result of the first 5 stores

现在我只想显示属性 features = 'TRUE' 的商店。我试过这个代码

function get_store() {
    $stores = read_all_stores();
    $feature = [];
    foreach ($stores as $s) {
      while ($s['featured'] == 'TRUE') {
        $feature[] = $s;
        return $feature;
      }
    }
    return false;
  }

但它只返回 one result

我尝试删除单引号,但它似乎只接受 'TRUE' 值作为字符串而不是布尔值。我该如何解决这个 foreach 循环?

解决方法

您的问题是,一旦找到匹配结果:$s['featured'] == 'TRUE',就返回它:return $feature;。相反,您需要在返回结果之前处理 $stores 中的所有值。如果存在匹配的商店(count($feature) 非零,即 truthy),则返回它们,否则返回 false。

function get_store() {
    $stores = read_all_stores();
    $feature = [];
    foreach ($stores as $s) {
        if ($s['featured'] == 'TRUE') {
            $feature[] = $s;
        }
    }
    return count($feature) ? $feature : false;
}
,

代码中有两个问题:

  1. cv2.findContours() 方法中,您会在找到匹配项后立即返回。相反,您应该添加所有匹配的,然后在最后返回。
  2. 要检查匹配,您应该使用 img_canny = cv2.Canny(thresh[y1: y2,x1: x2],50,50) contours,_ = cv2.findContours(img_canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 而不是 cv2.line(img,(x1,y1_1),(x2,y1_2),(255,160),5) cv2.line(img,y2_1),y2_2),5) cv2.drawContours(img[y1: y2,contours,-1,(0,255),10) cv2.imshow("Image",img) if cv2.waitKey(1) & 0xFF == ord('q'): break

这是您的代码的修改版本:

get_store()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。