采取以下措施;
// Looping through images passed to function...
list($width[$i], $height[$i]) = getimagesize($img_urls[$i]);
// ... Now to reorder by height
如何将$height
数组重新排序为最高>最短,同时保持与正确$width
值的关键关系?
我曾尝试使用uasort
,但我没有运气。 "最接近"尝试我已经低于,但是从最小到最大的排序
uasort($height, function($a, $b) use ($i) {
return $a[$i] + $b[$i];
});
答案 0 :(得分:2)
首先,使用结构:
class Image {
public $width;
public $height;
}
这是必要的,因为图像的宽度和高度几乎没有连接。没有图像高度,一个图像的宽度不显示。高度相同。您应该链接此数据。例如,在结构中。
之后,获取图像高度和宽度:
$images = array();
// get widths and heights
loop start
$img = new Image();
$img->width = assign width;
$img->height = assign height;
$images[] = $img;
loop end
最后,排序:
function cmp($a, $b) {
if ($a->height == $b->height) {
return 0;
}
return ($a->height < $b->height) ? -1 : 1;
}
uasort($images, 'cmp');
//$images are sorted by height now
如果不清楚,请告诉我。
答案 1 :(得分:0)
试试这个:
$images = array();
for ($i = 0; $i < count($img_urls); $i++) {
$image_size = getimagesize($img_urls[$i]);
$images[$image_size[1]]['width'] = $image_size[0];
$images[$image_size[1]]['height'] = $image_size[1];
}
sort($images);
var_dump($images);
答案 2 :(得分:-1)
uasort应该可以正常工作:
uasort( $height, function ( $a, $b ) { if ( $a == 0 ) { return 0; } else { return ( $a > $b ) ? -1 : 1; } } );
如果我这样做:
$arr = array();
$arr[0] = 512;
$arr[1] = 1024;
uasort( $arr, function ( $a, $b ) { if ( $a == 0 ) { return 0; } else { return ( $a > $b ) ? -1 : 1; } } );
var_dump( $arr );
var_dump( $arr[0] );
var_dump( $arr[1] );
我明白了:
array(2) {
[1]=>
int(1024)
[0]=>
int(512)
}
int(512)
int(1024)