最も簡単な方法は、number_of_reffers
をキーにして新しい配列を作成することです。次に、ksort()
またはkrsort()
のいずれかで新しい配列をソートします。これは最終的に元の配列をそのまま残します。それ以外の場合は、元の配列を意図した形式で作成する方が良いでしょう。関数として
<?php
// original array
$array = array(
array('refferrer' => 'http://google.com/', 'number_of_reffers' => '15'),
array('refferrer' => 'https://facebook.com/', 'number_of_reffers' => '22'),
array('refferrer' => 'none', 'number_of_reffers' => '74'),
array('refferrer' => 'http://findy.com/', 'number_of_reffers' => '6')
);
$foo = array(); // new empty array
// loop through $array, assign the number_of_reffers as the key for the refferrer
foreach ($array as $key => $bar) {
$foo[$bar['number_of_reffers']] = $bar['refferrer'];
}
/*
new array will be:
array(
'15' => 'http://google.com/',
'22' => 'https://facebook.com/'
etc .....
)
*/
// use Ksort/Krsort to sort the key asc or desc
ksort($foo); // ascending order
#krsort($foo); // descending order
die('<pre>'.print_r($foo, true).'</pre>'); // pretty printing of sorted array
?>
....
<?php
Function Referrer_sort($array, $asc = true) {
IF (!is_array($array)) { return 'not an array'; }
$result = array();
foreach ($array as $key => $value) {
$result[$value['number_of_reffers']] = $value['refferrer'];
}
switch ($asc) {
case false: krsort($result); return $result;
default: ksort($result); return $result;
}
}
$foo_asc = Referrer_sort($array);
$foo_desc = Referrer_sort($array, false);
die('<pre>Ascending:<br>'.print_r($foo_asc, true).'<br>Descending:<br>'.print_r($foo_desc, true).'</pre>');
?>
number_of_reffers
の値とインデックスキーを変更することにより元の配列を変更する元の配列
を変更します。
<?php
Function Rebuild_Referrer_sort($array, $asc = true) {
IF (!is_array($array)) { return 'not an array'; }
$result = array();
foreach ($array as $key => $value) {
$result[$value['number_of_reffers']] = array('refferrer' => $value['refferrer'], 'number_of_reffers' => $value['number_of_reffers']);
}
switch ($asc) {
case false: krsort($result); return $result;
default: ksort($result); return $result;
}
}
$foo_asc = Rebuild_Referrer_sort($array);
$foo_desc = Rebuild_Referrer_sort($array, false);
die('<pre>Ascending:<br>'.print_r($foo_asc, true).'<br>Descending:<br>'.print_r($foo_desc, true).'</pre>');
/**
Returns:
Ascending:
Array
(
[6] => Array
(
[refferrer] => http://findy.com/
[number_of_reffers] => 6
)
[15] => Array
(
[refferrer] => http://google.com/
[number_of_reffers] => 15
)
[22] => Array
(
[refferrer] => https://facebook.com/
[number_of_reffers] => 22
)
[74] => Array
(
[refferrer] => none
[number_of_reffers] => 74
)
)
Descending:
Array
(
[74] => Array
(
[refferrer] => none
[number_of_reffers] => 74
)
[22] => Array
(
[refferrer] => https://facebook.com/
[number_of_reffers] => 22
)
[15] => Array
(
[refferrer] => http://google.com/
[number_of_reffers] => 15
)
[6] => Array
(
[refferrer] => http://findy.com/
[number_of_reffers] => 6
)
)
*/
?>
...それがお役に立てば幸いです。それがあなたの問題を解決しなかった理由を説明できますか? –
@ Don'tPanicなぜ彼らは働いていなかったのか分かりませんが、私が受け入れた答えを以下に示すと、それがうまく説明され、[PHP:usort Manuel](http://php.net/manual /en/function.usort.php)。ありがとうございました。 – Ukor