1

$this->resultオブジェクトを保持するプロパティがあります:

array(40) {
  [0] => object(Model)#181 (7) {
    ["_id":protected] => string(2) "1"
    ["_img":protected] => string(95) "/1273720855.jpg"
  }
  [1] => object(Model)#224 (7) {
    ["_id":protected] => string(2) "2"
    ["_img":protected] => string(95) "/test.jpg"
  }
  [2] => object(Model)#182 (7) {
    ["_id":protected] => string(2) "3"
    ["_img":protected] => string(95) "/127377775.jpg"
  }
  [3] => object(Model)#224 (7) {
    ["_id":protected] => string(2) "4"
    ["_img":protected] => string(95) "/test.jpg"
  }
  [4] => object(Model)#182 (7) {
    ["_id":protected] => string(2) "5"
    ["_img":protected] => string(95) "/129586775.jpg"
  }
...

したがって、ループを実行すると、imgプロパティを取得できます。

foreach($this->result as $val){
    echo $val->getImg(); //'/1273720855.jpg'
}

私がしたいのは、オブジェクトを並べ替えて、プロパティ/test.jpgが最後になるようにするか、最後にエコーするようにすることです。

array(40) {
  [2] => object(Model)#182 (7) {
    ["_id":protected] => string(2) "3"
    ["_img":protected] => string(95) "/127377775.jpg"
  }
  [4] => object(Model)#182 (7) {
    ["_id":protected] => string(2) "5"
    ["_img":protected] => string(95) "/129586775.jpg"
  }
  [1] => object(Model)#224 (7) {
    ["_id":protected] => string(2) "2"
    ["_img":protected] => string(95) "/test.jpg"
  } 
  [3] => object(Model)#224 (7) {
    ["_id":protected] => string(2) "4"
    ["_img":protected] => string(95) "/test.jpg"
  }
....

あとがきなどをソートできる新しい配列を作成する必要がある場合でも、解決策に興味があります

アリのアイデア?ありがとう

4

2 に答える 2

4

あなたが求めているのはusortです。

http://php.net/usort

bool usort ( array &$array , callable $cmp_function )

並べ替えを実行する関数を記述し、この関数をパラメーター2として渡します。PHPは配列をループし、配列内の各値に対してその関数を実行します。

したがって、これに似たものが必要です。

<?php
function cmp($a, $b)
{
    return strcmp($a->getImg(), $b->getImg());
}

usort($this->result, "cmp");
于 2012-12-05T21:02:42.123 に答える
2

私はあなたが終わったのを見ることができます、40 Imagesそしてそれはまだ成長することができますなど..そしてあなたがそれをどこから得ているのかわかりませんがあなたの画像を保存するためにヒープを使うことができますそしてそれは自動的にソートされます...

$heap = new ImageStorage();


// Porpulate Storage form source 
$images = array(1 => "/1273720855.jpg",2 => "/test.jpg",3 => "/127377775.jpg",4 => "/test.jpg",5 => "/129586775.jpg");
foreach ( $images as $id => $img ) {
    $heap->insert(new Model($id, $img));
}

// Simple Output
echo "<pre>";
foreach ( $heap as $img ) {
    echo $img->getImg(), PHP_EOL;
}

出力

/1273720855.jpg
/127377775.jpg
/129586775.jpg
/test.jpg
/test.jpg

使用したクラス

// Image Sotrage Class
class ImageStorage extends SplHeap {
    public function compare($a, $b) {
        return strcmp($b->getImg(), $a->getImg());
    }
}

// Emulation of your Model class
class Model {
    protected $_id;
    protected $_img;
    function __construct($id, $img) {
        $this->_id = $id;
        $this->_img = $img;
    }

    public function getID() {
        return $this->_id;
    }

    public function getImg() {
        return $this->_img;
    }
}
于 2012-12-05T21:26:11.100 に答える