鍍金池/ 問答/HTML5  PHP/ 怎樣把數(shù)組中的某個(gè)元素提前到第一個(gè)位置

怎樣把數(shù)組中的某個(gè)元素提前到第一個(gè)位置

$a = [
        ['userid'=>'2',name='z'],
        ['userid'=>'1',name='l'],
        ['userid'=>'4',name='w'],
        ['userid'=>'3',name='h'],
];

怎樣把 userid=>4,這行提前到第一個(gè)位置。變成

$a = [
        ['userid'=>'4',name='w'],
        ['userid'=>'2',name='z'],
        ['userid'=>'1',name='l'],
        ['userid'=>'3',name='h'],
];

想實(shí)現(xiàn)的就是,選中項(xiàng)放到第一位,前臺(tái)列表太長了,方便用戶看到選中了哪個(gè)。

找到一個(gè)別人寫的,他好像是把最后一個(gè)拿到最前面,貌似不行。

$a = array('a', 'b', 'c');
array_unshift($a, array_pop($a));
var_dump($a);die;

回答
編輯回答
枕邊人

$a = [

['userid'=>'1','name'=>'l'],
['userid'=>'2','name'=>'z'],
['userid'=>'4','name'=>'w'],
['userid'=>'3','name'=>'h'],

];

foreach ($a as $key=>$val){

if($val['userid'] == 4){
    $info = $val;
    unset($a[$key]);
}

}
array_unshift($a, $info);
echo '<pre>';
print_r($a);

2018年3月15日 08:28
編輯回答
刮刮樂
$a = [
    ['userid'=>'2','name' => 'z'],
    ['userid'=>'1','name' => 'l'],
    ['userid'=>'4','name' => 'w'],
    ['userid'=>'3','name' => 'h'],
];
$userid = 4;
usort($a,
    function($a, $b) use ($userid)
    {
        return $b['userid'] == $userid;
    });
var_dump($a);
2018年3月10日 17:39
編輯回答
別瞎鬧
// 這個(gè)還是很容易想到, 好不好就不好說了
function toFirst($data, $userid = 0) {
    foreach($data as $key =>  $item) {
        if ($item['userid'] == $userid) {
            unset($data[$key]);
            array_unshift($data, $item);
            break;
        }
    }
    return $data;
}

用usort可能會(huì)發(fā)一點(diǎn)

function toFirst2($data, $now = []) {
    usort($data, function($a, $b) use ($now) {
        if (in_array($a['userid'], $now) && in_array($b['userid'], $now) ||
        !in_array($a['userid'], $now) && !in_array($b['userid'], $now)) {
            return 0;
        }
        return in_array($a['userid'], $now) ? -1 : 1;
    });
    return $data;
}
2017年1月18日 15:25