基礎知識
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'][]