ホームページ > バックエンド開発 > PHPチュートリアル > PHP配列のソートに関する問題、解決策

PHP配列のソートに関する問題、解決策

WBOY
リリース: 2016-06-13 13:26:31
オリジナル
916 人が閲覧しました

PHP の配列ソートの問題、解決してください!
/**
* ユーザー名に基づいて配列を左から右に照合して並べ替えます。ユーザー名が同じ場合は、カード ID で大きいものから小さいものに並べ替えます。
*/
$list = array(
0=>array('cardid'=>1001,'username'=>'zhangsan'),
1=>array('cardid'=>1002,'username'=>'zhangsanfeng'),
2=>array('cardid'=>1003,'username'=>'SBzhangsan '),
3=>array('cardid'=>1005,'username'=>'SBzhangsanisyou'),
4=>array('cardid'=>1007,'username '=>'zhangsan'),
);
一致する文字列: $q = 'zhangsan';

並べ替えられた結果は
$list = array(
0) になります。 =>array('cardid'=>1007,'username'=>'zhangsan'),
1=>array('cardid'=>1001,'username'=>' zhangsan' )、
2=>array('cardid'=>1003,'username'=>'zhangsanfeng')、
3=>array('cardid'=>1005,' username' =>'SBzhangsanisyou'),
4=>array('cardid'=>1007,'username'=>'SBzhangsan'),
);


------解決策---------------
SQL は使いやすいですが、使いにくいです

SQL コード

SELECT * FROM テーブル WHERE ユーザー名 LIKE '%zhangsan%' ORDER BY LOCATE('zhangsan',username) ASC , カード ID DESC
<br><font color="#e78608">------解決策----------------------</font><br>配列をソートしたい場合は、配列 並べ替え
ログイン後にコピー
PHP コード
$list = 配列(
0=>array('cardid'=>1001,'username'=>'zhangsan'),
1=>array('cardid'=>1002,'username'=>'zhangsanfeng'),
2=>array('cardid'=>1003,'username'=>'SBzhangsan'),
3=>array('cardid'=>1005,'username'=>'SBzhangsanisyou'),
4=>array('cardid'=>1007,'username'=>'zhangsan'),
);
$q = '張三';
foreach($list as $v) {
  $r1[] = $v['カードID'];
  list($r2[], $r3[]) =explode($q, $v['ユーザー名']);
}
array_multisort($r2, $r3, $r1, SORT_DESC, $list);
print_r($list);
<br><font color="#e78608">------解決策----------------------</font><br>投稿者が出した結果は説明に反していますおお。 <br><br>
ログイン後にコピー
PHP コード
「sort.php」 29L、801C が書き込まれました
[ユーザー:root 時刻:02:58:29 パス:/home/liangdong/php]$ php sort.php
配列
(
    [4] => 配列
        (
            [カード] => 1007
            [ユーザー名] =>
        )

    [1] => 配列
        (
            [カード] => 1002
            [ユーザー名] =>
        )

    [0] => 配列
        (
            [カード] => 1001
            [ユーザー名] =>
        )

    [3] => 配列
        (
            [カード] => 1005
            [ユーザー名] =>
        )

    [2] => 配列
        (
            [カード] => 1003
            [ユーザー名] => SBzhangsan
        )

)
[ユーザー:root 時刻:02:58:31 パス:/home/liangdong/php]$ cat sort.php
<?php
$list = 配列(
                        array('cardid'=>1001,'username'=>'zhangsan'),
                        array('cardid'=>1002,'username'=>'zhangsanfeng'),
                        array('cardid'=>1003,'username'=>'SBzhangsan'),
                        array('cardid'=>1005,'username'=>'SBzhangsanisyou'),
                        array('cardid'=>1007,'username'=>'zhangsan'),
                );
$name = "張三";

uasort($list, function($left, $right) {
                                グローバル $name;
                                $lndx = strpos($left['ユーザー名'], $name);
                                $rndx = strpos($right['ユーザー名'], $name);
                                $lid = $left['cardid'];
                                $rid = $right['cardid'];
                                if ($lndx === false && $rndx !== false ||
                                        $lndx !== false && $rndx === false) { // 名前が含まれていないものは小さいとみなされます。
                                        $lndx === false ? -1 : 1 を返します。
                                }
                                if ($lndx == $rndx) {
                                        $rid - $lid を返します。
                                } それ以外 {
                                        $lndx - $rndx を返します。
                                }
                });

print_r($list);
?>
 <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート