在Foreach循环中动态创建数组

时间:2014-06-18 04:04:46

标签: php arrays codeigniter loops foreach

我正在尝试在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);

        }
    }

如何修复此问题,以便第一个代码段中的代码与第二个代码段中的代码一样?

3 个答案:

答案 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);