php页面中,有二维数组,数组中有一值num,现已知num=7.0 需把小于num并是最大值 的那一列值输出,也就是输出 num=6.0的那个数组,
$arr = array(
array( 'id' => 5, 'num' => '5.0'),
array( 'id' => 3, 'num' => '6.0 ),
array( 'id' => 6, 'num' => '7.0 ),
);
由于数组中记录量特多,不建议用从头循环到尾的思路,
求如何实现,thanks
$arr = array(
array( 'id' => 5, 'num' => '5.0'),
array( 'id' => 3, 'num' => '6.0 ),
array( 'id' => 6, 'num' => '7.0 ),
);
由于数组中记录量特多,不建议用从头循环到尾的思路,
求如何实现,thanks
排序了又怎么处理呢,
只是记录量大,
$arr = array(
array( 'id' => 5, 'num' => '5.0'),
array( 'id' => 3, 'num' => '6.0 ),
array( 'id' => 6, 'num' => '7.0 ),
);这个数组就可手动调整,(就当取数值时,排序好了)现:已知num=7.0 需把小于num并是最大值 的那一列值输出,也就是输出 num=6.0的那个数组,
<?php
$arr = array(
array( 'id' => 5, 'num' => 5.0),
array( 'id' => 3, 'num' =>6.0 ),
array( 'id' => 6, 'num' => 7.0 ),
array( 'id' => 8, 'num' => 8.0 ),
array( 'id' => 9, 'num' => 23.0 ),
array( 'id' => 19, 'num' => 66.0 ),
array( 'id' => 30, 'num' => 77.0 ),
array( 'id' => 40, 'num' => 100.0 ),
);
print_r($arr);
$start=0; //查找的起始位址
$end=count($arr)-1; //查找的结束位址
$z=0; //计录循环次数
$a=7.0;
$pos=0;
while ($statr<=$end){
$z++;
$i=floor(($start + $end)/2);
$j=$arr[$i]['num']; // 中间记录
if ($a<$j){
$end=$i-1;
}
elseif ($a > $j){
$start=$i+1;
}
else {
$find=$arr[$i]['num'];
$pos=$i;
break;
}
}
echo $find;
echo "<br>循环了".$z."次";print_r($arr[$i-1]);?>
//数组先按照num由小到大排序
$num=7.0;
$tem = "";
for($i=0; $i<count($arr); $i++) {
if($arr[$i]['num'] < $num ) {
$tem = $arr[$i];
}else{
print_r($tem);
return;
}
}
select id, num from tabname where num < '$num' order by num desc limit 1
如果是下面的数组
$arr = array(
array( 'id' => 3, 'num' =>16.0 ),
array( 'id' => 5, 'num' => 5.0),
array( 'id' => 6, 'num' => 7.4 ),
array( 'id' => 8, 'num' => 8.1 ),
array( 'id' => 9, 'num' => 23.0 ),
array( 'id' => 19, 'num' => 66.0 ),
array( 'id' => 30, 'num' => 7.7 ),
array( 'id' => 40, 'num' => 100.0 ),
);求 num小于7.7 的最大值,结果得不到,(应该得到 7.4)
$max = 0.0;
$arr = array(
array( 'id' => 3, 'num' =>16.0 ),
array( 'id' => 5, 'num' => 5.0),
array( 'id' => 6, 'num' => 7.4 ),
array( 'id' => 8, 'num' => 8.1 ),
array( 'id' => 9, 'num' => 23.0 ),
array( 'id' => 19, 'num' => 66.0 ),
array( 'id' => 30, 'num' => 7.7 ),
array( 'id' => 40, 'num' => 100.0 ),
);
foreach($arr as $v){if($v['num'] < $num && $v['num'] > $max)$a = $v;}print_r($a);