Php 数组中大于X的返回数

Php 数组中大于X的返回数,php,arrays,xpath,foreach,Php,Arrays,Xpath,Foreach,以下代码自动查找页面上的最高价格: $vw_link = get_field('shop_link'); $ch = curl_init($vw_link); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $cl = curl_exec($ch); $dom = new DOMDocument(); @$dom->loadHTML($cl); $xpath = new DOMXpa

以下代码自动查找页面上的最高价格:

    $vw_link = get_field('shop_link');

    $ch = curl_init($vw_link);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $cl = curl_exec($ch);

    $dom = new DOMDocument();
    @$dom->loadHTML($cl);
    $xpath = new DOMXpath($dom);

    $price = $xpath->query("//span[@class='price']");

    foreach($price as $value) { 
    $vw_array[] =  floatval(str_replace('$', '', $value->nodeValue));
    update_field('shop_price',max($vw_array));
    }
自切片奶酪以来,最好的事情是,如果它能够返回$vw_数组中的值,该值介于特定数量之间,即大于100和小于200。如果100-200之间有多个数字,那么最棘手的部分是返回100之后的第一个最大数字

例如,如果以下价格都包装在“价格”类中:

$88

$92

$105  <-- return this number

$125

$180

$210

有人知道如何变出这样一个伟大的函数吗?

我想如果我理解正确的话,这应该是可行的。如果你的美元在那里,你可以把它拿走

function ReturnFirst($array = array(), $low = 0, $high = 0) {
        foreach($array as $value) {
                if(($value >= $low) && ($value <= $high)) {
                        // When first number hit, just return it
                        return $value;
                    }
            }
        // This will return false if it doesn't return any results
        return false;
    }

echo
$number =   ReturnFirst(array(10,20,30,40,50,60), 35,60);

// This will return the number 40

我想如果我理解正确的话,这应该行得通。如果你的美元在那里,你可以把它拿走

function ReturnFirst($array = array(), $low = 0, $high = 0) {
        foreach($array as $value) {
                if(($value >= $low) && ($value <= $high)) {
                        // When first number hit, just return it
                        return $value;
                    }
            }
        // This will return false if it doesn't return any results
        return false;
    }

echo
$number =   ReturnFirst(array(10,20,30,40,50,60), 35,60);

// This will return the number 40
你也可以在那之后加上美元符号


此外,您还可以在后面加上美元符号

假设采用标准排序数组,即按升序或降序排列的元素,索引为0、1、2,…,则较大数组的最快方法是二进制搜索算法

// assuming sorted $a, looking for $value as lowest value
$low = 0;
$high = count($a);
while ($low < $high) {
  $middle = (($high - $low) >> 1) + $low; // same as floor(($high - $low) / 2)
  if ($a[$middle] < $value) // or: strcmp($a[$middle], $value) < 0
    $low = $middle + 1;
  else
    $high = $middle;
}
最后,$low变量将包含排序数组中$value的最早可能的插入索引。换句话说,如果$low小于数组的长度,它将指向您想要的值,如果它小于您的上限值。否则,数组不包含与您的请求匹配的值


但是,如果只处理较短的数组,由于复杂性降低,线性搜索可能会更快。

假设使用标准排序数组,即索引为0、1、2…的元素按升序或降序排列,则较大数组的最快方法是二进制搜索算法

// assuming sorted $a, looking for $value as lowest value
$low = 0;
$high = count($a);
while ($low < $high) {
  $middle = (($high - $low) >> 1) + $low; // same as floor(($high - $low) / 2)
  if ($a[$middle] < $value) // or: strcmp($a[$middle], $value) < 0
    $low = $middle + 1;
  else
    $high = $middle;
}
最后,$low变量将包含排序数组中$value的最早可能的插入索引。换句话说,如果$low小于数组的长度,它将指向您想要的值,如果它小于您的上限值。否则,数组不包含与您的请求匹配的值

但是,如果只处理较短的数组,线性搜索可能会更快,因为它降低了复杂性。

代码:

$Max = 15;
$Min = 10;

$A = ['$6','$7','$9','$11','$12','$13','$17','$22']; // Array in

foreach($A As $V){
    $B = ltrim($V, "$");

    if($B >= $Min && $B <= $Max) {
        $C[] = $V;
    }
}

print_r($C);
代码:


你需要分类elements@nkmk我认为你不需要把它分类。在一个大数组中,它会更快地命中,没错,但你不需要对它进行排序,它才能工作。非常感谢你的回答:你需要排序elements@nkmk我认为你不需要把它分类。它会在一个大数组中更快地命中,没错,但你不需要对它进行排序,它就能工作。非常感谢你的回答:
$11
$12
$13