簡體   English   中英

在Foreach循環中動態創建數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM