php动态数组变量添加元素

基础知识

php数组添加元素两种方法

<?php 

$stack = array("orange", "banana"); 
array_push($stack, "apple", "raspberry"); 
print_r($stack); 
?> 
或者
$a[0]="abc"; 
$a[1]="def"; 
$a[] = "hello"; 
$a[] = "world"; 

print_r($a);

 

我的情况

$arrName=array();

$arr_curent='arrName'; // 这里会根据条件 把$arr_curent置为不同的数组变量

使用
$$arr_curent[]=$要添加的元素 时直接语法不通过
修改为:

$arr_curent[]='arr_weixiu';

 

添加元素时:

$$arr_curent=$row;  

 

报 Notice: Array to string conversion

---------------------

 

$$arr_curent[]=$row;  

 

报:Cannot use [] for reading

一番实验后只好使用 array_push方法,才成功,代码如下

 

$arr_guandao=array();

   $arr_baomu=array();

   $arr_weixiu=array();

   $arr_huoyun=array();

   $resultIndex=0;

 

    do {

 

 

        /* store first result set */

 

        if ($result = mysqli_store_result($conn)) {

 

$arr_curent=NULL;

  switch($resultIndex)

{

case 0:

  $arr_curent='arr_guandao';

  break;

case 1:

  $arr_curent='arr_baomu';

break;

case 2:

  $arr_curent='arr_weixiu';

break;

case 3:

  $arr_curent='arr_huoyun';

break;

}

 

            while ($row = mysqli_fetch_row($result)) {

 

 array_push($$arr_curent,$row);

 

}

 

            mysqli_free_result($result);

 

        }

$resultIndex++;

 

 

        /* print divider */

    } while (mysqli_next_result($conn));

}

 

 

mysqli_close($conn);

 

echo "<pre>";

var_dump($arr_guandao);

echo "-----\n";

var_dump($arr_baomu);

echo "----\n";

var_dump($arr_weixiu);

echo "----\n";

var_dump($arr_huoyun);

echo "</pre>";

exit();

-----------------------------------------------------------------------------------

后记,实际使用中发现array_push的效率很低,主要是array_push会重新编制数组的索引,也就是会对数组每个成员调用

arry[]=$var一次,数组一长肯定要低,后来查询网络后,得以重新使用 $$ary[]=$row 方式

转自:http://zhidao.baidu.com/question/91066720.html?an=0&si=7

$GLOBALS[$s][] = $row;

${$s}[] = $row;

楼主,麻烦你去下一个PHP手册看下吧。

可变变量
有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:
<?php
$a = 'hello';
?> 
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如:
<?php
$$a = 'world';
?> 
这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,可以表述为:
<?php
echo "$a ${$a}";
?> 
以下写法更准确并且会输出同样的结果:
<?php
echo "$a $hello";
?> 
它们都会输出:hello world。
要 将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。

----------------------------------------------------------------------------------------------------------------------

最后附上关于php的动态变量一些资料

有时候可变的变量名会给编程带来很大的方便。也就是说变量名可以被动态的命名和使用。通常变量通过下面这样的语句来命名:

<?php
$a 
'hello';
?>

可变变量名指的是使用一个变量的值作为这个变量的名称。在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称,就像下面那样。

<?php
$$a 'world';
?>

通过上面的两个语句,有两个变量被定义:变量$a,装的内容是”hello”以及变量$hello,装的内容是“world”。 于是,下面的语言:

<?php
echo "$a ${$a}";
?>

跟下面的语句的输出完全一致:

<?php
echo "$a $hello";
?>

它们都输出:hello world

为了使用数组的可变变量名,你需要解决一个歧义问题。就是,如果你写$$a[1],解析器需要明白究竟你的意思是要把$a[1]当成一个变量,还是 要把$$a当成变量、[1]指的是这个变量的索引。解决这个歧义问题的语法是:第一种情况使用${$a[1]},第二种情况使用${$a}[1]。

类属性也可以通过可变属性名来访问。可变属性名从产生调用所在的变量的访问范围内获取。例如,如果你的表达式是这样 的:$foo->$bar,那么运行时将会在本地变量范围内寻找变量$bar,它的值将会做为$foo对象的一个属性名。如果$bar是个数组也可 以使用。

例1 可变变量名

<?php
class foo {
    var 
$bar 'I am bar.';
$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
$foo->$bar "\n";
echo 
$foo->$baz[1] . "\n";
?>

上面的例子将会输出下面的结果:

I am bar.
I am bar.

警告

请注意,可变变量名不能用于PHP函数和类里的超级全局数组变量上。变量$this也是一个不能动态取名的特殊变量

转载自 http://hi.baidu.com/qianko/blog/item/e9cf542af54e008c023bf611.html

下面的实例是我开发项目中用到的一个例子

/*
| -------------------------------------------------------------------
| 权限配置文件
| $config[key1][key2][key3]
| key1 后台左侧菜单树按相同的key1分组
| key2 权限名称 action_code
| key3 name系菜单树显示的中文名称 url菜单的链接;不填的情况下是"key1/key2",你可以填入自定义的菜单链接
| -------------------------------------------------------------------
*/
/*管理员*/
$config['admin']['user_admin']['name'] = '用户管理';
$config['admin']['user_admin']['url'] = 'user/';
$config['admin']['custom_permissions']['name'] = '权限设置';
$config['admin']['custom_permissions']['url'] = 'user/custom_permissions';
$config['admin']['roles']['name'] = '角色组管理';
$config['admin']['roles']['url'] = '';/*用户中心*/
$config['user']['change_password']['name'] = '修改密码';
$config['user']['change_password']['url'] = 'user/change_password_view';
$config['user']['user_profile']['name'] = '资料设置';
$config['user']['user_profile']['url'] = 'user/profile';
......
上面的$config转化成下面的$perms
** $perms[$i]['group'] = $key;
** $perms[$i]['action_code'] = $k;
** $perms[$i]['name'] = $v['name'];
** $perms[$i]['hasperm'] = false;
*/
$perms = getPermissionsArray();
$admin = array();
$user = array();
...
foreach($perms as $key => $row)
{   if ($dxAuth->get_permission_value($row['action_code']) != NULL AND $dxAuth->get_permission_value($row['action_code']))   { ${$row['group']}['children'][] = getTreeArray($row['name'], $row['url']);   } }   ...... 由于$row['group']后面是对数组进行操作所以要用{}界定第一个$的范围,其等价于$admin['children'][]

 

 

转载于:https://www.cnblogs.com/yanqing/archive/2012/08/18/2645416.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值