英文:
Get matching or next closest larger value in an array using PHP
问题
如何在数组中找到或搜索下一个最接近的较大数?
例如,假设以下是我的数组
array(10, 8, 6, 12, 4, 20)
当我搜索 9
时,它应该从上面的数组中给我 10
如果我搜索 13
,它应该给我 20
如果我搜索 5
,它应该给我 6
等等
英文:
How can I find or search for the next closest larger number in an array?
For example, let's assume the following is my array
array( 10, 8, 6, 12, 4, 20 )
when I search for 9
, it should give me 10
from the above array
if I search for 13
it should give me 20
if I search for 5
it should give me 6
and so on
答案1
得分: 2
在排序与遍历整个数组之间存在计算方面的权衡。我不是计算机科学专业的,如果我必须在某个地方消除微秒,我会进行基准测试,但它运行正常。
function closest($array, $number)
{
sort($array);
foreach ($array as $a) {
if ($a >= $number) return $a;
}
return end($array);
}
$array = array( 10, 8, 6, 12, 4, 20 );
echo closest($array, 9); // 10
echo closest($array, 13); // 20
echo closest($array, 5); // 6
英文:
There's a tradeoff in compute in sorting versus iterating over the whole thing. I'm not a compsci major and if I had to eliminate microseconds somewhere I'd benchmark this but it works fine.
function closest($array, $number)
{
sort($array);
foreach ($array as $a) {
if ($a >= $number) return $a;
}
return end($array);
}
$array = array( 10, 8, 6, 12, 4, 20 );
echo closest($array, 9); // 10
echo closest($array, 13); // 20
echo closest($array, 5); // 6
答案2
得分: 0
Also figured out a new way of solving it Great to @Daniel Tharp for the great answer. What I did was to loop through each element of an array, and picked all the numbers that are bigger than the search then pushed them into a fresh new array. Finally, I used PHP min
to get the least number from the newly created array.
Be careful when using min
as it can trigger an error if no match was found in an array. See the solution below.
function wpccb_get_next_closest_large_number( $search, $array ){
$array_of_all_larger_numbers = array();
foreach( $array as $value ){
if( $search < $value ){
array_push( $array_of_all_larger_numbers, $value );
}
}
if( count( $array_of_all_larger_numbers ) == 0 ){
return 0;
}
return min( $array_of_all_larger_numbers );
}
英文:
Also figured out a new way of solving it Great to @Daniel Tharp for the great answer. What I did was to loop through each element of an array, and picked all the numbers that are bigger than the search then pushed them into a fresh new array. Finally, I used PHP min
to get the least number from the newly created array.
Be careful when using min
as it can trigger an error if no match was found in an array. See the solution below.
function wpccb_get_next_closest_large_number( $search, $array ){
$array_of_all_larger_numbers = array();
foreach( $array as $value ){
if( $search < $value ){
array_push( $array_of_all_larger_numbers, $value );
}
}
if( count( $array_of_all_larger_numbers ) == 0 ){
return 0;
}
return min( $array_of_all_larger_numbers );
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论