Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何仅对多维数组中的一部分进行排序?_Php_Arrays_Sorting - Fatal编程技术网

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>";