2017-02-08 8 views
0

に機能によってオブジェクトの配列をソートのは、私のようなオブジェクトというアカウントがあるとしましょうPHP

class CONTACT 
{ 
    private $lastName; 
    public function getLastName() 
    { 
     return $this->lastName; 
    } 
} 

は、その後、私は、これらのオブジェクトの配列を作成し$accountArray = ACCOUNT::get(); この配列をアルファベット順にソートするにはどうすればいいですか?$account->getContact()->getLastName();

class Account 
{ 
    private $contact; 
    public function getContact(); 

    public static function cmp($a,$b) 
    { 
     $al = strtolower($a->getContact()->getLastName()); 
     $bl = strtolower($b->getContact()->getLastName()); 
     if ($al == $bl) { 
     return 0; 
     } 
     return ($al > $bl) ? +1 : -1; 
    } 
    public static function sortByLastName($accountArray) 
    { 
     usort($moACOUNTArray, array('ACCOUNT', 'cmp')); 
    } 
} 

をしかし、私はこのエラーを取得する:

Call to undefined method ACCOUNT::getContact() 
+4

http://php.net/manual/en/function.usort.php – Madbreaks

+0

どう

このコードを試してみてくださいあなたは自分自身を試してみましたか?おそらく*研究*を行い、これを行う方法を学ぶのは良い考えです。ここでは始まり、[魔法のリンク](http://google.com) – Nytrix

+0

申し訳ありませんが、私はusortを試してみましたが、設定方法について私が不足しているものがあります。 – AlexHeuman

答えて

1

コメントで述べたようにあなたは、PHPのusort機能を使用することができ、私が試した何

。自己説明する例があります:

<?php 

class ACCOUNT 
{ 
    private $contact; 
    public function getContact() 
    { 
     return $this->contact; 
    } 

    public function setContact($v) 
    { 
     $this->contact = $v; 
    } 
} 

class CONTACT 
{ 
    private $lastName; 

    public function getLastName() 
    { 
     return $this->lastName; 
    } 

    public function setLastName($v) 
    { 
     $this->lastName = $v; 
    } 
} 

//create data for testing 
$c1 = new CONTACT; 
$c1->setLastName('aaaa'); 
$a1 = new ACCOUNT; 
$a1->setContact($c1); 

$c2 = new CONTACT; 
$c2->setLastName('zzz'); 
$a2 = new ACCOUNT; 
$a2->setContact($c2); 

$c3 = new CONTACT; 
$c3->setLastName('ggg'); 
$a3 = new ACCOUNT; 
$a3->setContact($c3); 

$array = array($a1, $a2, $a3); 


//making sort 
function cmp($a, $b) 
{ 
    return strcmp($a->getContact()->getLastName(), $b->getContact()->getLastName()); 
} 

usort($array, "cmp"); 

//showing sort result 
echo '<pre>'; 
print_r($array); 

結果は次のとおりです:

Array 
(
    [0] => ACCOUNT Object 
     (
      [contact:ACCOUNT:private] => CONTACT Object 
       (
        [lastName:CONTACT:private] => aaaa 
       ) 

     ) 

    [1] => ACCOUNT Object 
     (
      [contact:ACCOUNT:private] => CONTACT Object 
       (
        [lastName:CONTACT:private] => ggg 
       ) 

     ) 

    [2] => ACCOUNT Object 
     (
      [contact:ACCOUNT:private] => CONTACT Object 
       (
        [lastName:CONTACT:private] => zzz 
       ) 

     ) 

) 
+0

私はこれを試しても、私はまだこのエラーが発生します。定義されていないメソッドを呼び出すmoACCOUNT :: getContact()in/controllers/accountController .php on line 37 – AlexHeuman

+0

あなたが問題に投稿したコードでは、クラス 'ACCOUNT'では、関数' getContact() 'には本文がありません。それが問題だ。私の 'ACCOUNT'クラスをチェックしてください。そして私のコードを試してみてください。 – aslawin

+0

申し訳ありませんが、これは私の脳死です。私はACCOUNT-> getPrimaryClinet() - > getContact() - > getLastName();と呼ぶことになっていました。 – AlexHeuman

関連する問題