返回数组中大于 X 的数字


Return number in array that is greater than X

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

    $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_array 中的值,该值介于特定数量之间,即大于 100 和小于 200。棘手的部分是返回 100 之后的第一个最大数字,如果 100-200 之间有多个数字。

例如(如果以下价格都包含在"价格"类中):

$88
$92
$105  <-- return this number
$125
$180
$210

有谁知道如何变出如此宏伟的功能?

function getHighestValue($arr, $high = 200, $low =100) {
    $data = $arr;
    // sort it so you can find 1st highest value in range
    asort($data);
    foreach ($data as $item) {
    //trim dollar sign as i can see from your example
        $item = ltrim($item, "$");
        if ($item >= $low && $item <= $high) {
            return $item;
        }
    }
  return false;
}

因此,如果您的数据是

$arr = [
    '$140',
    '$22',
    '$143',
    '$199',
];
var_dump(getHighestValue($arr)); // will return 140

您也可以在此之后添加美元符号

我想

如果我理解正确,这应该可以工作。如果$存在,您可以将其剥离。

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小于数组的长度,它将指向您想要的值,如果它小于您的上限。否则,数组不包含与您的请求匹配的值。

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

代码:

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

输出:

$11
$12
$13