我遇到了大约4个小时的问题。
$getrank = DB::table('users')->select('codes')->orderBy('codes', 'desc')->get();
使用var_dump($getrank);
,我可以看到数组中的内容。
所以我得到了这个:
array(6) {
[0] => object(stdClass)#62 (1) {
["codes"]=> int(584)
}
[1] => object(stdClass)#64 (1) {
["codes"]=> int(117)
} [2] => object(stdClass)#65 (1) {
["codes"]=> int(88)
} [3] => object(stdClass)#66 (1) {
["codes"]=> int(66)
} [4] => object(stdClass)#67 (1) {
["codes"]=> int(53)
} [5] => object(stdClass)#68 (1) {
["codes"]=> int(37)
}
}
但我希望他们分开。我试了很多!
最后我想这可能是我的答案:
echo $getrank[0]['codes'];
echo $getrank[1]['codes'];
echo $getrank[2]['codes'];
echo $getrank[3]['codes'];
echo $getrank[4]['codes'];
echo $getrank[5]['codes'];
但是没有。
我想要一个排名,我只需要前5名([0]-[4])。我还能做什么?最后,我希望每个值都是字符串!
好的,现在通过阅读您的评论,我了解您期望的结果。
$getrank = array_map(
function ($user) { return $user->codes; },
DB::table('users')->orderBy('codes', 'desc')->take(5)->get()
);
这能满足你的需求吗?
只需使用pluck()
(或lists()
,pluck()
的别名)方法即可。
$codes = DB::table('users')->orderBy('codes', 'desc')->take(5)->lists('codes');
echo '<pre>';
foreach($codes as $key => $code) {
echo 'code '.$key.': '.$code.PHP_EOL;
}
echo '</pre>';
此处的文档
您可以尝试添加到array(),这将把结果从数据库转换为数组,这样您就可以使用问题末尾提供的代码
$getrank = DB::table('users')->select('codes')->orderBy('codes', 'desc')->get()->toArray();
foreach($getrank as $rank) {
echo $rank['codes'];
}
如果您想将代码值强制转换为字符串,它只是echo (string) $rank['codes'];