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'][]

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM