![](/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.