Определение максимально подходящего значения

S
На сайте с 15.12.2009
Offline
67
615

Здравствуйте, нужно помочь сделать определение максимально удобных значений. Лучше начну с примера и описание. Есть в базе информация о ширине и высоте картинки, ее нужно будет обрезать под максимально удобное значение (разрешение) из массива:

$windowsize = array(

array(1920,1200),
array(1920,1080),
array(1680,1050),
array(1600,900),
array(1440,900),
array(1366,768),
array(1280,1024),
array(1280,960),
array(1280,800),
array(1280,768),
array(1152,864),
array(1024,768),
array(1024,600),
array(800,600)
);

если у картинки будет разрешение 820 на 650 то нужно что бы выполнилось обрезание 800х600,

как пробежаться по данным и выбрать именно массив с 800,600 ? а действия с остальными не выполнять?!

 for($i=0; $i<count($windowsize); $i++){

$a = $windowsize[$i];


}

спасибо за помощь!

[Удален]
#1

Учитывая, что массив небольшой, я бы сравнил перебором:


##Искомый
$w=array(820,650);

$ws = array(
array(1920,1200),
array(1920,1080),
array(1680,1050),
array(1600,900),
array(1440,900),
array(1366,768),
array(1280,1024),
array(1280,960),
array(1280,800),
array(1280,768),
array(1152,864),
array(1024,768),
array(1024,600),
array(800,600)
);

foreach($ws as $v=>$k){
$g[$v]=array(abs($w[0]-$ws[$v][0]),abs($w[1]-$ws[$v][1]));
}
asort($g);
##а вот результат
print_r($ws[key($g)]);

Array ( [0] => 800 [1] => 600 )
[umka]
На сайте с 25.05.2008
Offline
456
#2

foreach ($ws as $a) { if ($a[0]<=$w[0]&&$a[1]<=$w[1]) break; }

$a[0] и $a[1] — это результат, при условии, что $ws отсортирован

Лог в помощь!
[Удален]
#3
'[umka:
;7579372']foreach ($ws as $a) { if ($a[0]<=$w[0]&&$a[1]<=$w[1]) break; }
$a[0] и $a[1] — это результат, при условии, что $ws отсортирован

По вашему методу если w={1300,950}; выдает результат 1280х800

А по моему методу - 1280х960, что, согласитесь, ближе к истине

zhitov
На сайте с 30.01.2005
Offline
219
#4

loot, а как 800 обрезать до 960? :)

Строительные калькуляторы ( https://www.zhitov.com/ )
[Удален]
#5
zhitov:
loot, а как 800 обрезать до 960? :)

Мда, чего то я ступил 🤣

Решал не ту задачу, что нужна автору.

тогда да, [umka] все правильно написал

S
На сайте с 15.12.2009
Offline
67
#6

спасибо всем)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий