此问题旨在作为有关在PHP中排序数组的问题的参考.很容易认为您的特定情况是独一无二的,值得一个新问题,但大多数实际上是本页面上其中一个解决方案的微小变化.
如果您的问题与此问题的副本相同,请仅在您能够解释为何与以下所有问题明显不同时才要求重新打开您的问题.
如何在PHP中对数组进行排序?
如何在PHP中对复杂数组进行排序?
如何在PHP中对对象数组进行排序?
有关使用PHP现有函数的实际答案,请参阅1.,有关排序算法的学术详细答案(PHP的函数实现以及您可能需要哪些非常复杂的案例),请参阅参考资料2.
我将CSV数据加载到多维数组中.这样,每个"行"都是一个记录,每个"列"包含相同类型的数据.我正在使用下面的函数加载我的CSV文件.
function f_parse_csv($file, $longest, $delimiter)
{
$mdarray = array();
$file = fopen($file, "r");
while ($line = fgetcsv($file, $longest, $delimiter))
{
array_push($mdarray, $line);
}
fclose($file);
return $mdarray;
}
Run Code Online (Sandbox Code Playgroud)
我需要能够指定要排序的列,以便重新排列行.其中一列包含格式为的日期信息,Y-m-d H:i:s我希望能够以最近的日期为第一行进行排序.
所以我们在PHP中使用了这个函数
strcmp(string $1,string $2) // returns -1,0, or 1;
Run Code Online (Sandbox Code Playgroud)
但是,我们不要有一个intcmp(); 所以我创建了一个:
function intcmp($a,$b) {
if((int)$a == (int)$b)return 0;
if((int)$a > (int)$b)return 1;
if((int)$a < (int)$b)return -1;
}
Run Code Online (Sandbox Code Playgroud)
这只是感觉很脏.你们都觉得怎么样?
这是通过传入的排序值对Javascripts进行排序的类的一部分.
class JS
{
// array('order'=>0,'path'=>'/js/somefile.js','attr'=>array());
public $javascripts = array();
...
public function __toString()
{
uasort($this->javascripts,array($this,'sortScripts'));
return $this->render();
}
private function sortScripts($a,$b)
{
if((int)$a['order'] == (int)$b['order']) return 0;
if((int)$a['order'] > (int)$b['order']) return 1;
if((int)$a['order'] < (int)$b['order']) return -1;
}
....
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为'posts'的表,其中包含以下列:'post_id int primary incrementments','poster_id int'和'status text'以及名为friends的数组,其中包含以下列:'user_id int primary'和'friend_ids text'.
我需要获取朋友文本列中的所有ID,这很容易使用:
$friends = explode(',', \Friend::where('user_id', \Sentry::getUser()->id)->first()->friend_ids);
Run Code Online (Sandbox Code Playgroud)
文本列中的数据看起来像'1,2,3'等.
然后我创建一个Eloquent Collection对象,也可以通过以下方式轻松完成:
$posts = new \Illuminate\Database\Eloquent\Collection();
Run Code Online (Sandbox Code Playgroud)
但问题是我无法弄清楚如何填充集合并通过Post对象的'created_at'列对其内容进行排序.
这就是我现在所拥有的:
foreach ($friends as $id) {
$posts_ = \Post::where('poster_id', $id)->getQuery()
->orderBy('created_at', 'desc')
->get();
foreach($posts_ as $post) {
$posts->add($post);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这个代码是否适用于通过'created_at'列对整个帖子集合进行排序.我还需要能够轻松地对整个集合进行分页.
对集合进行排序的推荐方法是什么?
当我尝试从这里应用以下代码
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
Run Code Online (Sandbox Code Playgroud)
它以升序给出了结果.
输出:
0
0
0
0
0
0.29
1.09
6.33
Run Code Online (Sandbox Code Playgroud)
在交换$ a和$ b时,除了一个值之外,它按降序给出结果
usort($myArray, function($a, $b) {
return $b['order'] - $a['order'];
});
Run Code Online (Sandbox Code Playgroud)
输出:
6.33
1.09
0
0
0
0
0.29
0
Run Code Online (Sandbox Code Playgroud)
我想按以下顺序得到结果:
6.33
1.09
0.29
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
我如何实现同样的目标.
我想基于count降序对这个数组进行排序.这是我的array
array(
46 =>
array (
'name' => 'HSR Layout',
'url' => 'hsr-layout',
'count' => 2,
),
37 =>
array (
'name' => 'Electronic City',
'url' => 'electronic-city',
'count' => 3,
)
)
Run Code Online (Sandbox Code Playgroud) 我有这个脚本:
<?php
if(urldecode($_SERVER['REQUEST_URI']) == "/?articles")
{
include("Articles.php");
}
?>
Run Code Online (Sandbox Code Playgroud)
这允许我为页面设置自定义 URL。现在,当我需要这样的 URL 时就会出现问题:
/?articles | Page that contains newest articles which loads when user clicks "< Previous" button
/?articles&1 | Page that contains older articles which loads when user clicks "Next >" button
/?articles&2 | Page that contains older than older articles
/?articles&3 | Page that contains old articles
/?articles&4 | Page that contains old articles
/?articles&5 | Page that contains oldest articles
/?articles&6 | Page that contains oldest articles, …Run Code Online (Sandbox Code Playgroud) 我在 PHP 中有这个数组:
在 PHP API 中,我有这个数组,想按 custom_price 排序,但不知道如何实现..
Array
(
[0] => Array
(
[id] => 1204
[custom_price] => 33.1500
)
[1] => Array
(
[id] => 1199
[custom_price] => 16.83
)
[2] => Array
(
[id] => 1176
[custom_price] => 16.83
)
[3] => Array
(
[id] => 1173
[custom_price] => 11.73
)
[4] => Array
(
[id] => 1170
[custom_price] => 22.5
)
)
Run Code Online (Sandbox Code Playgroud)
我如何从 .. 高到低 & 从低到高 .. 按 custom_price 排序
我有一个像这样的关联数组。
Array
(
[0] => Array
(
[id] => 1
[name] => Admin
[email] => admin@admin.com
[group] => Admin
[href] => http://localhost/teradasys/index.php/users/user/user_info?&user_id=1
)
[1] => Array
(
[id] => 2
[name] => rochellecanale
[email] => rochellecanale11@gmail.com
[group] =>
[href] => http://localhost/teradasys/index.php/users/user/user_info?&user_id=2
)
[2] => Array
(
[id] => 3
[name] => symfony
[email] => chelle@flax.ph
[group] =>
[href] => http://localhost/teradasys/index.php/users/user/user_info?&user_id=3
)
[3] => Array
(
[id] => 4
[name] => jolopeterson
[email] => jolo@flax.ph
[group] =>
[href] => http://localhost/teradasys/index.php/users/user/user_info?&user_id=4
) …Run Code Online (Sandbox Code Playgroud) 经过多次搜索后,我无法找到关于如何使用array_multisort()对多维数组进行不敏感排序的一个很好的解释.在处理来自数据库查询的信息时,我发现这是一个非常有用的功能,所以我想我会分享.