![](/img/trans.png)
[英]Dynamically create multi multidimensional array while looping through foreach loop
[英]Create array dynamically in Foreach loop
我正在尝试在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);
}
}
如何解决此问题,使第一个代码段中的代码与第二个代码段中的代码一样工作?
您必须像这样更改代码段
$data[]=array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']));
您的代码存在的问题是,您不是在创建多维数组,而是覆盖$data
的$row
值,由于所有其他数据均被覆盖,最终它具有最后一个数据
cmp
函数cmp
移动到foreach
循环之外
您是否尝试过在外部使用自定义排序(在循环上构建数组之后)。 考虑以下示例:
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);
}
将值存储到数组格式锁中,例如$data[]
foreach ($query as $row)
{
$data[]=array(
Array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']),
);
}
然后在foreach循环外打印数据
print_r($data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.