代码之家  ›  专栏  ›  技术社区  ›  Sasha

php-do/while如果结果为空,则转到数组中的下一个

php
  •  1
  • Sasha  · 技术社区  · 6 年前

    $radiusList = [
        '2'   => '2km',
        '5'   => '5km',
        '10'  => '10km',
        '25'  => '25km',
        '50'  => '50km',
        '100' => '100km',
        '200' => '200km',
        '500' => '500km',
    ];
    

    我正在通过获取当前选定的半径

    $radius = $_POST['radius'] ? $_POST['radius'] : 2;
    

    如果结果是空的,我必须去下一个半径。这是我的

    $clinics     = [];
    $radiusCount =  count($radiusList);
    $i = 0;
    
    do {
    
        $radius  = $radiusList[$radius];
    
        $clinics = $this->clinicQuery($conditionsQuery, $lat, $lng, $radius);
        $i++;
    
    } while  (!empty($clinics) && $i <= $radiusCount);
    

    如何设置当前半径(从半径列表中)以及如果结果来自

    2 回复  |  直到 6 年前
        1
  •  1
  •   u_mulder    6 年前

    您可以用重写循环 foreach break 以下内容:

    $radius = $_POST['radius'] ? $_POST['radius'] : 2;
    
    foreach ($radiusList as $index => $radius_str) {
        // check that current index value is greater or equals `$radius`
        // it will skip values that are less than `$radius`
        if ($index >= $radius) {
            // find clinics
            $clinics = $this->clinicQuery($conditionsQuery, $lat, $lng, $index);
            // if clinics found - break the loop
            if (!empty($clinics)) {
                break;
            }
        }
    }
    
        2
  •  1
  •   mscho    6 年前

    $clinics = [];
    $radiusList = array_filter($radiusList, function($index) use ($radius) {
        return $index >= $radius;
    }, ARRAY_FILTER_USE_KEY);
    ksort($radiusList); // if you need to make sure the list is ordered
    foreach ($radiusList as $distance => $distanceLabel) {
        $clinics = $this->clinicQuery($conditionsQuery, $lat, $lng, $radius);
        if (!empty($clinics)) {
            break;
        }
    }