PHP - 按高度排序图像数组

时间:2014-05-03 20:56:05

标签: php arrays sorting

采取以下措施;

// 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];
});

3 个答案:

答案 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)