Array在PHP末尾创建一个NULL记录

时间:2015-10-27 17:37:46

标签: php arrays

我对php中的数组有点新,我有一个函数连接到我的数据库,并在数组中返回结果,一旦我有数组在smarty中使用它我必须基本上拆解它并创建一个新阵列。

我一直在使用for循环来实现这一目标。但每次for循环运行时,我都会以NULL记录作为我的最后一个值。

如果返回了13条记录,则由于某种原因会创建14条记录。

欢迎任何建议:)。

$permissionsarray=db_select("select group_name from `user_groups` order by group_name");
for($i = 0; $permissions[$i] = $permissionsarray[$i]['group_name']; $i++) ;

1 个答案:

答案 0 :(得分:3)

你的for循环测试$permissions[$i]是否评估为“truthy” - 如果它没有(在你的情况下可能为NULL)契约已经完成,即$ permissions [$ i]已被分配

立即解决方案就像是

$permissionsarray=db_select("select group_name from `user_groups` order by group_name");
for($i = 0;  $p = $permissionsarray[$i]['group_name']; $i++) {
    $permissions[$i] = $p;
}

(这可能仍会引发未定义的索引警告)。

但是没有必要自己“处理”索引。使用foreach - 循环,无论使用何种实际密钥,都可以迭代数组。使用[],您可以将项目附加到数组,而无需自己跟踪“下一个键”。

$permissions = array();
foreach( db_select("select group_name from `user_groups` order by group_name") as $p ) {
    $permissions[] = $p['group_name'];
}

但是有一种更简单的方法

$permissionsarray=db_select("select group_name from `user_groups` order by group_name");
$permissions = array_column($permissionsarray, 'group_name');

http://docs.php.net/array_column
(如果您使用的是php< php5.5,那么这个函数的填充链接可以使用旧版本的php)