編集:
フレームワークで作業している場合は、ソートコールバックをメンバー関数として宣言するのが最適です(もちろん、必要な場所と同じクラス内で)。
private function sortCB(array $a, array $b)
{//the array type hinting in arguments is optional
$i = array_keys($a);//but highly recommended
$j = array_keys($b);
if (end($i) === end($j))
{
return 0;
}
//replace '>' with '<' if you want to sort descending
return (end($i) > end($j) ? 1 : -1);//this is ascending
}
次に、実際の並べ替えが必要な方法で:
uasort($theArray,array($this,'sortCB'));
その他の例については、ドキュメントを参照してください。この(かさばる)回答の最後にフルクラスの例を追加しました
私はwritecodeonlineでこれを試しましたが、これはこの種のものではあまり得意ではありませんが、これはうまくいきました:
$foo = array_fill_keys(array('foo','bar','q','Bond'),array());
$i = '256';
foreach($foo as $k=>$v)
{
$foo[$k][$i] = $k;
$i = (string)((int)$i%2 === 0 ? ((int)$i/2)+1 : (int)$i*3);
}
function sortCB($a,$b)
{
$i = array_keys($a);
$j = array_keys($b);
if (end($i) === end($j))
{
return 0;
}
return (end($i) > end($j) ? 1 : -1);
}
uasort($foo,'sortCB');
var_dump($foo);
private function sortCB(array $a,array $b)
ただし、フレームワークを使用しているので、その関数をメンバー関数として宣言し、次のように使用するとよいでしょう。
uasort($foo,array($this, 'sortCB'));
このコールバック関数をクラスコンテキストで使用するのに最適な方法については、こちらをご覧ください。
完全な例+使用法(テスト済みで動作中):
class test
{
public $foo = null;
public function __construct()
{
$this->foo = array_fill_keys(array('foo','bar','q','Bond'),array());
$i = '256';
foreach($this->foo as $k=>$v)
{
$this->foo[$k][$i] = $k;
$i = (string)((int)$i%2 === 0 ? ((int)$i/2)+1 : (int)$i*3);
}
}
private function sortCB($a,$b)
{
$i = array_keys($a);
$j = array_keys($b);
if (end($i) === end($j))
{
return 0;
}
return (end($i) > end($j) ? 1 : -1);
}
public function sortFoo()
{
uasort($this->foo,array($this,'sortCB'));
print_r($this->foo);
return $this->foo;
}
}
$bar = new test();
$arr = $bar->sortFoo();