基础知识
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_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'][]