2013-07-12 62 views
0

的變量名我碰到一些代碼,我幾年前寫的,當我第一次學習PHP和不知道數組從0開始,而不是1獲取陣列

$afc_east[1] = "Buffalo Bills"; 
$afc_east[2] = "Miami Dolphins"; 
$afc_east[3] = "New England Patriots"; 
$afc_east[4] = "New York Jets"; 

$afc_west[1] = "Denver Broncos"; 
$afc_west[2] = "Kansas City Chiefs"; 
$afc_west[3] = "Oakland Raiders"; 
$afc_west[4] = "San Diego Chargers"; 

//.... other divisions... 

//Put all of the arrays into one 
$afc = array($afc_east, $afc_west, $afc_north, $afc_south); 

for($i=0;$i<count($afc);$i++) 
{ 
    $count = count($afc[$i]); 

    for($y=1;$y<=$count;$y++) 
    { 
     // I'd like to find out how to echo "afc_east" or "afc_west" 
     $name_of_array = ""; //Idk 
     echo "$".$name_of_array."[".$y-1."]" = ".$afc[$i][$y].";<br />"; 
    } 

} 

我想絆倒讓我所有的數組都從0開始。但是,有太多的數組讓我返回並將數組中的數字更改爲低於當前數組的數目。對於我來說,使用php回顯數組名稱及其相應的值會更容易,然後將它們複製並粘貼到文本編輯器中。

+0

您應該能夠輕鬆地減少任何支持宏的文本編輯器中的所有數組索引。國際海事組織,你應該*不*添加計數來說明基於'1'的索引,因爲當你最終完成並將數組更改爲索引爲'0'時,你將有更多的工作要做。 – Paulpro

+0

我正在使用文本處理程序。任何想法我應該怎麼做呢? – Lance

+0

你不能使用你的代碼得到它,你應該使用類似於'$ afc = array('afc_east'=> $ afc_east,...' – zerkms

回答

2

如果你所有的元素都以正確的順序聲明,你可以簡單地刪除硬編碼的鑰匙,讓PHP枚舉:

$afc_east[1] = "Buffalo Bills"; 
$afc_east[2] = "Miami Dolphins"; 
$afc_east[3] = "New England Patriots"; 
$afc_east[4] = "New York Jets"; 

變爲

$afc_east = array(); // Optional 
$afc_east[] = "Buffalo Bills"; 
$afc_east[] = "Miami Dolphins"; 
$afc_east[] = "New England Patriots"; 
$afc_east[] = "New York Jets"; 

你的編輯器應該允許您通過替代正則表達式,例如用\1\2代替(\$[a-z_]+\[)\d+(\] =)

+0

這就是答案! – bschaeffer

+1

特定正則表達式的榮譽:)請務必以半手動方式進行查找和替換,而不是全部替換,因爲通過替換錯誤的東西來創建一個難以發現的錯誤很容易。 – Matchu

+0

@Matchu確實:)我*總是*使用'替換和查找'時更換正則表達式。來自經驗(即,我太聰明地引入了浪費狩獵bug的時間太多)。 – jensgram

0

PHP不提供此功能。考慮以下幾點:

$foo = array("a", "b", "c"); 
$bar = $foo; 

是數組的名字foobar?都?都不是?真正的答案是數組是它自己的對象,並且它不會跟蹤它的存儲位置。如果您將它存儲在其他地方,則會丟失有關其它變量存儲的所有信息。

......嘆了口氣。我相信有一個更好的方法可以用你的文本編輯器來做到這一點,但是,如果我們想要做的只是調整你的代碼,讓它按預期工作,我們可以使用... sheesh,我不相信我是會說這個... variable variables

下面是一個非常粗略的PHP的功能,我真的不喜歡,但可能會在這個非常特殊的情況是有用的:

$username = "Matchu"; 
$var_name = "username"; 
echo $$var_name; // echoes "Matchu" 

而是在陣列中存儲陣列和遍歷那些的,我們可以改爲迭代變量名:

$afc = array("afc_east", "afc_west", "afc_north", "afc_south"); 
foreach($afc as $name_of_array) { 
    $array_value = $$name_of_array; 
    // Ta da, you have the variable name and the array stored in it. Go crazy. 
} 

我非常,非常強烈建議不要在你的日常使用代碼此功能,但是,在這個非常特殊的情況下,你實際上想要使用變量名稱是因爲一個非常特定的原因,它可能很方便。

0

,如果你要重新索引陣列和在陣列中的數字鍵,你可以這樣做只是

$myarray = array_values($myarray); 
// example 
$afc_east[1] = "Buffalo Bills"; 
$afc_east[2] = "Miami Dolphins"; 
$afc_east[3] = "New England Patriots"; 
$afc_east[4] = "New York Jets"; 
$afc_east = array_values($afc_east); 
echo '<pre>'; 
print_r($afc_east); 

輸出:

Array 
(
[0] => Buffalo Bills 
[1] => Miami Dolphins 
[2] => New England Patriots 
[3] => New York Jets 
) 
+0

這不會幫助我得到數組的名稱 – Lance

+0

@Lance做這樣的創建關聯數組: - $ afc = array('afc_east'=> $ afc_east,'afc_west'=> $ afc_west); –

0

那麼這裏是腳本,快速和骯髒的

<?php 

$afc_east[1] = "Buffalo Bills"; 
$afc_east[2] = "Miami Dolphins"; 
$afc_east[3] = "New England Patriots"; 
$afc_east[4] = "New York Jets"; 

$afc_west[1] = "Denver Broncos"; 
$afc_west[2] = "Kansas City Chiefs"; 
$afc_west[3] = "Oakland Raiders"; 
$afc_west[4] = "San Diego Chargers"; 

$afc = array($afc_east,$afc_west); 
$count = 0; 
foreach($afc as $arr){ 
     $total = count($arr); 
     for($i=0;$i<=$total-1;$i++){ 
      $afc[$count][$i] = array_shift($arr);   
     } 
     array_unshift($afc[$count],$afc[$count][0]); 
     array_pop($afc[$count]); 
     array_pop($afc[$count]); 
     $count++; 
} 
//Output code to check if everything went correctly 
foreach($afc as $arr){ 
    foreach($arr as $key=>$value){ 
      echo $key."->".$value."<br/>"; 
    } 
} 

?> 
+0

以及如何獲取數組的名稱?例如:「afc_east」,「afc_west」 – Lance

+0

這是您必須手動執行的操作。這實際上是唯一的一步。那就是創建一個數組數組。 – Tanmay