我正在尝试在foreach循环中创建一个数组,然后用密钥对其进行排序。
创建数组的每个循环如下所示:
public function index(){
$query=$this->My_model->get_data();
foreach ($query as $row)
{
$data=array(
Array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']),
);
function cmp ($a, $b) {
return $a['Points'] < $b['Points'] ? 1 : -1;
}
usort($data, "cmp");
print_r($data);
}
}
但这只返回数组中第一个项目的第一个。
但是当我直接输入一些数组项时,如下所示,它可以正常工作并对所有数组项进行排序。
public function index(){
$query=$this->My_model->get_data();
foreach ($query as $row)
{
$data = array (
Array ( 'Points' => 500, 'Name' => 'James Lion' ) ,
Array ( 'Points' => 1200, 'Name' => 'John Smith' ),
Array ( 'Points' => 700, 'Name' => 'Jason Smithsonian' ) );
function cmp ($a, $b) {
return $a['Points'] < $b['Points'] ? 1 : -1;
}
usort($data, "cmp");
print_r($data);
}
}
如何修复此问题,以便第一个代码段中的代码与第二个代码段中的代码一样?
答案 0 :(得分:1)
您必须像这样更改代码段
$data[]=array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']));
您的代码存在的问题是,您没有创建多维数组,而是覆盖$row
中的$data
值,这些值最终会包含最后一个数据,因为所有其他数据都被覆盖了
同时将您的函数cmp
移到foreach
循环
答案 1 :(得分:1)
您是否尝试过在外部使用自定义排序(在循环中构建数组后)。考虑这个例子:
public function index()
{
$query = $this->My_model->get_data();
foreach ($query as $row) {
$data[] = array('Points' => $points,' Name' => $row['Name'], 'Phone' => $row['phone']),);
}
function cmp ($a, $b) {
return $a['Points'] < $b['Points'] ? 1 : -1;
}
usort($data, "cmp");
print_r($data);
}
答案 2 :(得分:0)
将您的值存储为数组格式
锁定$data[]
foreach ($query as $row)
{
$data[]=array(
Array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']),
);
}
然后在foreach循环之外打印数据
print_r($data);