【问题标题】:Create array dynamically in Foreach loop在 Foreach 循环中动态创建数组
【发布时间】:2014-06-18 04:04:45
【问题描述】:

我正在尝试在 foreach 循环中创建一个数组,然后按键对其进行排序。

创建数组的 for each 循环如下所示:

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

        }
    }

我该如何解决这个问题,以便第一个 sn-p 中的代码能够像第二个 sn-p 中那样工作?

【问题讨论】:

  • 您是否尝试过在 foreach 操作后使用自定义排序? (意思是在foreach之后和之外)
  • @kevinabelita 我之前尝试过,但它只返回最后一项。上面的第二个代码 sn-p 工作正常,数组和排序代码在那个位置,但是当我尝试使用动态代码 int 创建数组时,第一个 sn-p 不起作用,所以我认为它与我在第一个代码 sn-p 的循环中构建数组的方式就是。

标签: php arrays codeigniter loops foreach


【解决方案1】:

你必须像这样更改代码片段

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

您的代码的问题是,您没有创建多维数组,而是覆盖了 $data 中的 $row 值,因为所有其他数据都被覆盖了,所以它最终具有最后一个数据

还将您的函数 cmp 移到 foreach 循环之外

【讨论】:

  • 效果很好!非常感谢。
【解决方案2】:

您是否尝试过在外部使用自定义排序(在循环上构建数组之后)。考虑这个例子:

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);
}

【讨论】:

  • 试过这个,这给出了一个错误,其中 cmp 函数中的索引“点”没有被识别/识别,所以我得到未定义的索引错误
【解决方案3】:

将您的值存储为数组格式 像这样锁定$data[]

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

然后在 foreach 循环之外打印数据

print_r($data);

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多