Php 如何仅对多维数组中的一部分进行排序?
我有一个多重数组。。输出如下所示:Php 如何仅对多维数组中的一部分进行排序?,php,arrays,sorting,Php,Arrays,Sorting,我有一个多重数组。。输出如下所示: Array ( [0] => Array ( [0] => AdsBot [1] => 7 ) [1] => Array ( [0] => SurveyBot [1] => 1 ) [2] => Array (
Array
(
[0] => Array
(
[0] => AdsBot
[1] => 7
)
[1] => Array
(
[0] => SurveyBot
[1] => 1
)
[2] => Array
(
[0] => bingbot
[1] => 3
)
[3] => Array
(
[0] => bot
[1] => 27
)
Array
(
[0] => Array
(
[0] => bot
[1] => 27
)
[1] => Array
(
[0] => AdsBot
[1] => 7
)
[2] => Array
(
[0] => bingbot
[1] => 3
)
[3] => Array
(
[0] => SurveyBot
[1] => 1
)
我现在需要的是按数字对数组进行排序。。所以它应该是这样的:
Array
(
[0] => Array
(
[0] => AdsBot
[1] => 7
)
[1] => Array
(
[0] => SurveyBot
[1] => 1
)
[2] => Array
(
[0] => bingbot
[1] => 3
)
[3] => Array
(
[0] => bot
[1] => 27
)
Array
(
[0] => Array
(
[0] => bot
[1] => 27
)
[1] => Array
(
[0] => AdsBot
[1] => 7
)
[2] => Array
(
[0] => bingbot
[1] => 3
)
[3] => Array
(
[0] => SurveyBot
[1] => 1
)
我需要按数字数组键对其进行排序。。但我真的不知道该怎么做——嗯,我对php还不熟悉
多元文化。数组代码:
$bot_array = [
['name' => 'bingbot', 'number' => $bingbot],
['name' => 'googlebot', 'number' => $googlebot],
['name' => 'robots.txt', 'number' => $robots_txt],
['name' => 'exabot', 'number' => $exabot],
['name' => 'bot', 'number' => $bot],
['name' => 'robot', 'number' => $robot],
['name' => 'BaiDuSpider', 'number' => $BaiDuSpider],
['name' => 'Yahoo Slurp', 'number' => $yahoo_slurp],
['name' => 'AdsBot', 'number' => $adsbot],
['name' => 'SurveyBot', 'number' => $surveybot],
['name' => 'scanner', 'number' => $scanner],
['name' => 'checker', 'number' => $checker],
];
或者也许有更聪明的方法来做到这一点?
我需要一个前十名:)左边应该写上所有的名字,右边写上数量
谢谢你的帮助:)
编辑:
这就是它现在给我的:o你可以使用这个函数
function sortAscending($accounts, $key)
{
$ascending = function($accountA, $accountB) use ($key) {
if ($accountA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] < $accountB[$key]) ? -1 : 1;
};
usort($accounts, $ascending);
return $accounts;
}
函数排序($accounts,$key)
{
$ascending=函数($accountA,$accountB)使用($key){
如果($accountA[$key]==$accountB[$key]){
返回0;
}
返回($accountA[$key]<$accountB[$key])?-1:1;
};
usort($accounts,$ascending);
归还$2个帐户;
}
试试看。它允许您定义回调以对自定义表达式进行排序。在本例中,您希望按每个子数组中的第二个索引元素进行反向排序:
<?php
$bots = [
[
'name' => 'AdsBot',
'number' => 7,
],
[
'name' => 'SurveyBot',
'number' => 1,
],
[
'name' => 'bingbot',
'number' => 3,
],
[
'name' => 'bot',
'number' => 27,
],
];
usort($bots, function($a, $b) {
return $a['number'] <= $b['number'];
});
print_r($bots);
希望这有帮助:)您可以使用
根据你最新的问题,应该是
<?php
usort($bot_array, 'botSort');
function botSort($val1, $val2) {
if (is_array($val1) && is_array($val2)) {
if ($val1['number'] <= $val2['number']) {
return 1;
}
}
return -1;
}
print_r($data);
请参见下面的代码
$arr = array(
0 => array(
'0' => 'AdsBot',
'1' => 7
),
1 => array(
'0' => 'SurveyBot',
'1' => 1
),
2 => array(
'0' => 'bingbot',
'1' => 3
),
3 => array(
'0' => 'bot',
'1' => 27
)
);
echo '<pre>';
print_r(sortDescOrder($arr,'1'));
echo '</pre>';
function sortDescOrder($accounts, $key)
{
$ascending = function($accountA, $accountB) use ($key) {
if ($accountA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] > $accountB[$key]) ? -1 : 1;
};
usort($accounts, $ascending);
return $accounts;
}
$arr=array(
0=>数组(
“0”=>“AdsBot”,
'1' => 7
),
1=>数组(
“0”=>“SurveyBot”,
'1' => 1
),
2=>数组(
“0”=>“bingbot”,
'1' => 3
),
3=>数组(
“0”=>“bot”,
'1' => 27
)
);
回声';
打印(订单($arr,'1'));
回声';
函数sortDescOrder($accounts,$key)
{
$ascending=函数($accountA,$accountB)使用($key){
如果($accountA[$key]==$accountB[$key]){
返回0;
}
返回($accountA[$key]>$accountB[$key])?-1:1;
};
usort($accounts,$ascending);
归还$2个帐户;
}
或者查看其他代码
$arry = array( array('AdsBot','7'),
array('SurveyBot','1'),
array('bingbot','3'),
array('bot','27')
);
echo "<pre>"; print_r($arry); echo "</pre>";
function sortByOrder($a, $b) {
return $a['1'] - $b['1'];
}
usort($arry, 'sortByOrder');
echo "<pre>"; print_r($arry); echo "</pre>";
$bot\u数组=[
['name'=>'bingbot','number'=>5],
['name'=>googlebot','number'=>8],
['name'=>'robots.txt','number'=>3],
['name'=>'exabot','number'=>7],
['name'=>bot','number'=>7],
['name'=>'robot','number'=>12],
['name'=>BaiDuSpider','number'=>45],
['name'=>'Yahoo Slurp','number'=>18],
['name'=>'AdsBot','number'=>78],
['name'=>SurveyBot','number'=>96],
['name'=>'scanner','number'=>41],
['name'=>'checker','number'=>10]
];
usort($bot_数组,函数($x,$y){
return$x['number']使用这种方法对数组进行排序
$arry=array(数组('AdsBot','7'),
数组('SurveyBot','1'),
数组('bingbot','3'),
数组('bot','27')
);
echo“;print_r($arry);echo”;
功能排序器($a,$b){
返回$a['1']-$b['1'];
}
usort($arry,'sortByOrder');
echo“;print_r($arry);echo”;
Plz检查这个:我检查了。我尝试了那里的注释中的很多东西。但是没有人为我工作:/我认为这是一种复杂的o.oNo攻击方式,但是如果你认为这很复杂,那么就不要尝试按包含的值对多维数组排序。嗯……我尝试了,但没有工作。你的代码与这里还有其他答案…我不知道为什么,但它就是不起作用-它改变了我数组的排序方式,但没有正确的排序方式我会尝试:)请给我一分钟:)自从我发布此答案以来,您编辑了您的问题。您的数组是基于索引的;现在是基于键的。我将更新我的答案。已更新。请注意,回调表达式现在按键比较元素;即:$a['number']我又试了一次,但仍然不起作用。它改变了我数组的排序方式,但不像我需要的那样:/这应该如何工作?我的意思是它会给我一个未定义的偏移量。uasort也需要2个参数。@PHPprogrammer42你应该阅读和可调用函数的行为我不知道为什么,但php说:uasort至少需要2个参数。这是正确的I don’我找不到“sortByorder”
<?php
usort($bot_array, 'botSort');
function botSort($val1, $val2) {
if (is_array($val1) && is_array($val2)) {
if ($val1['number'] <= $val2['number']) {
return 1;
}
}
return -1;
}
print_r($data);
$arr = array(
0 => array(
'0' => 'AdsBot',
'1' => 7
),
1 => array(
'0' => 'SurveyBot',
'1' => 1
),
2 => array(
'0' => 'bingbot',
'1' => 3
),
3 => array(
'0' => 'bot',
'1' => 27
)
);
echo '<pre>';
print_r(sortDescOrder($arr,'1'));
echo '</pre>';
function sortDescOrder($accounts, $key)
{
$ascending = function($accountA, $accountB) use ($key) {
if ($accountA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] > $accountB[$key]) ? -1 : 1;
};
usort($accounts, $ascending);
return $accounts;
}
$bot_array = [
['name' => 'bingbot', 'number' => 5],
['name' => 'googlebot', 'number' => 8],
['name' => 'robots.txt', 'number' => 3],
['name' => 'exabot', 'number' => 7],
['name' => 'bot', 'number' => 7],
['name' => 'robot', 'number' => 12],
['name' => 'BaiDuSpider', 'number' => 45],
['name' => 'Yahoo Slurp', 'number' => 18],
['name' => 'AdsBot', 'number' => 78],
['name' => 'SurveyBot', 'number' => 96],
['name' => 'scanner', 'number' => 41],
['name' => 'checker', 'number' => 10]
];
usort($bot_array, function($x, $y) {
return $x['number'] <= $y['number'];
});
echo '<pre>';
print_r($bot_array);
echo '</pre>';
$arry = array( array('AdsBot','7'),
array('SurveyBot','1'),
array('bingbot','3'),
array('bot','27')
);
echo "<pre>"; print_r($arry); echo "</pre>";
function sortByOrder($a, $b) {
return $a['1'] - $b['1'];
}
usort($arry, 'sortByOrder');
echo "<pre>"; print_r($arry); echo "</pre>";