我有一个从数据库返回的对象数组.未排序数组上的print_r如下所示:
Array
(
[0] => stdClass Object
(
[nid] => 53162
[title] => Kroger 'Giving Hope' Standee
[path] => node/53162
)
[1] => stdClass Object
(
[nid] => 64185
[title] => Kroger 'Giving Hope' Stanchion Sign
[path] => node/64185
)
[2] => stdClass Object
(
[nid] => 52190
[title] => Betty Crocker Kroger 'Giving Hope' Shipper
[path] => node/52190
)
[3] => stdClass Object
(
[nid] => 53159
[title] => Frito-Lay Kroger 'Giving Hope' Packaging
[path] => node/53159
)
[4] …Run Code Online (Sandbox Code Playgroud) 无法理解为什么usort()将数组转换为1
这是SomeClass中我的排序回调方法的代码
protected $_sortKey = '';
public function setSortKey($keyname)
{
$this->_sortKey = $keyname;
}
public function sortByKeyValue($a, $b)
{
$key = $this->_sortKey;
if ($a->$key == $b->$key) {
return 0;
}
return ($a->$key < $b->$key) ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)
这是进行排序的代码
$someObj = new SomeClass();
$someObj->setSortKey('name');
$sorted_stuff = usort($stuff_to_sort, array($someObj, 'sortByKeyValue'));
Run Code Online (Sandbox Code Playgroud)
在哪里$stuff_to_sort:
Array
(
[0] => stdClass Object
(
[id] => 57
[status] => ACTIVE
[updated] => 2010-09-17T12:16:25Z
[name] => Windows Server 2008 SP2 x64 - MSSQL2K8R2
)
[1] …Run Code Online (Sandbox Code Playgroud) 这是代码 - http://sandbox.onlinephpfunctions.com/code/ac3b31af0ce4d348f91957b314a8fa089cc8e779 仅当95字符串取消注释时才有效.
我花了半天时间从这里制作代码 - /sf/answers/1763497921/ - 工作.但由于某些原因,usort在函数内部不起作用.为什么?..
代码的相关部分:
function fs($array){
usort($array, 'sortByOrder');
};
function sortByOrder($a, $b) {
return $a['order_inside_level'] - $b['order_inside_level'];
};
fs($array);
// usort($array, 'sortByOrder'); // If to uncomment this string then array is ordered by 'order_inside_level'
var_dump($array);
Run Code Online (Sandbox Code Playgroud) 合并4个数组后,我使用usort通过Date对最终数组进行排序.然而,它以升序的方式排序,我需要它是Descending.当只有2个数组被合并时,我已经看到了降序排序的解决方案,但是没有超过2个的例子.
每个数组($ files,$ newfiles,$ comments和$ ratings)都有以下字段:ID,Title,Date和Type.我需要通过Date Descending对它们进行排序.这是我目前的代码:
function dateSort($a,$b,$c,$d){
$dateA = strtotime($a['Date']);
$dateB = strtotime($b['Date']);
$dateC = strtotime($c['Date']);
$dateD = strtotime($d['Date']);
return ($dateA-$dateB-$dateC-$dateD);
//I HAVE ALSO TRIED REVERSING THE ORDER LIKE THIS BUT NO LUCK.
//THE SORTING IS STRANGE AND UN ORDERED WHEN I DO THIS:
// return ($dateD-$dateC-$dateB-$dateA);
}
$result = array_merge($files, $newfiles,$comments,$ratings);
usort($result, 'dateSort');
Run Code Online (Sandbox Code Playgroud) 我遇到了主要的usort()问题!:(因此,基本上我想按它们的值对数组进行排序。我希望这些值以以下顺序显示:白金,黄金,白银,青铜,完整,无,不完整。现在我可以很好地对其进行排序,但是我想保留其密钥(可能吗?),这是我的代码:
function compareMedals( $a, $b ) {
$aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete');
$aValues = array( 1, 2, 3, 4, 5, 6, 7);
$a = str_ireplace($aMap, $aValues, $a);
$b = str_ireplace($aMap, $aValues, $b);
return $a - $b;
}
usort($list, 'compareMedals');
Run Code Online (Sandbox Code Playgroud)
那么可以在保留密钥的同时对它们进行排序吗?谢谢!:)
编辑
数组:
$array = array("post1" => 'Platinum', "Post2" => "Bronze, "Post3" = > Gold)
Run Code Online (Sandbox Code Playgroud)
应该输出:
"Post1" => 'Platinum',
"Post3" => 'Gold',
"Post2" …Run Code Online (Sandbox Code Playgroud) 今天我提供了这个问题的答案,我写了一个脚本,但我发现出了问题.
这是第一个脚本
<?php
$array = array(
"0" => array (
"id" => 1204,
"custom_price" => 33.1500
),
"1" => array (
"id" => 1199,
"custom_price" => 15.83
),
"2" => array (
"id" => 1176,
"custom_price" => 16.83
)
);
usort($array, function($a, $b) {
return $a['custom_price'] - $b['custom_price'];
});
echo "<pre>";
print_r($array);
Run Code Online (Sandbox Code Playgroud)
它的输出是(你也可以检查沙盒上的输出)
<pre>Array
(
[0] => Array
(
[id] => 1176
[custom_price] => 16.83
)
[1] => Array
(
[id] => 1199
[custom_price] => 15.83 …Run Code Online (Sandbox Code Playgroud) 我正在尝试按键对数组(同时包含字母和数字键)进行排序,其中字母键将按字母顺序排列在前,然后按数字键排列。
尝试了ksort所有可用的标志,但这没有帮助。尝试了几个SO答案,但没有一个达到我的目的。这是我拥有的数组的示例..
$array = array(
'Bat' => array(),
'Dog' => array(),
'Apple' => array(),
'Cat' => array(),
1 => array(),
3 => array(),
2 => array(),
4 => array()
);
Run Code Online (Sandbox Code Playgroud)
我需要这样排序:
$array = array(
'Apple' => array(),
'Bat' => array(),
'Cat' => array(),
'Dog' => array(),
0 => array(),
1 => array(),
2 => array(),
3 => array()
);
Run Code Online (Sandbox Code Playgroud)
我从 SO 答案中了解到,它可能需要一个自定义函数来使用该usort函数进行排序。这就是我迷失的地方。任何有关正确方向的帮助或指导将不胜感激。
谢谢