2014-06-18 92 views
0

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

     } 
    } 

如何解决这个问题,这样在第一个片段的代码,使作品,因为它在第二个片段呢?

+0

你试过在foreach操作后使用自定义排序吗? (意思是在foreach之后) – user1978142

+0

@kevinabelita我已经尝试过,但它只是返回最后一个项目。上面的第二个代码片段工作正常,数组和排序代码处于该位置,但是当我尝试使用动态代码int创建数组时,第一个代码片段不起作用,所以我认为这是我的方式在第一个代码片段的循环中构建数组。 – Tester

回答

1

你必须改变的代码块这样

$data[]=array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone'])); 

与您的代码的问题是,你是不是创建一个多维数组和$data最终赢得最后的数据,因为所有而不是覆盖$row值其他数据被覆盖

而且你的价值观将你的功能cmpforeach循环

+0

工作很好!非常感谢。 – Tester

+0

不客气。很高兴我们解决了它 – shatheesh

0

存储到rray格式 锁这样$data[]

foreach ($query as $row) 
    { 
      $data[]=array(
      Array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']), 
      ); 
    } 

然后打印foreach循环以外的数据

print_r($data); 
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); 
} 
+0

试过这个,这给出了一个错误,其中cmp函数索引“点”未被识别/识别,所以我得到未定义的索引错误 – Tester