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 は使いやすいですが、使いにくいです
SELECT * FROM テーブル WHERE ユーザー名 LIKE '%zhangsan%' ORDER BY LOCATE('zhangsan',username) ASC , カード ID DESC <br><font color="#e78608">------解決策----------------------</font><br>配列をソートしたい場合は、配列 並べ替え
$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>
「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>