[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.