2011-07-26 17 views
4

我用這裏的代碼的修改版本Determining what classes are defined in a PHP class file從一個特定的文件列表創建一個多維的類和函數數組。我最終得到的是這樣的(我知道這些名字已經搞亂了,但是我蠢蠢欲動,不得不回頭改變3個不同文件中的類名和函數名,所以我們假設它們是合法的類名和函數名),PHP如何在沒有索引的情況下訪問多維數組的所有元素?

Array 
(
    [0] => Array 
     (
      [namethis_whatever_I_want] => Array 
       (
        [0] => another_function 
        [1] => whatever_function 
       ) 

     ) 

    [1] => Array 
     (
      [tc_class_simplevar] => Array 
       (
        [0] => set_var_test 
        [1] => get_var_test 
       ) 

     ) 

    [2] => Array 
     (
      [another_freekin_class] => Array 
       (
        [0] => some_function 
        [1] => another_crazy_function 
       ) 

     ) 

) 

所以現在我需要能夠訪問類名和函數名每一類下不知道該指數是什麼任何人。我已經嘗試過循環,foreach,並使用像$ i和$ ii這樣的計數器通過數字索引來訪問它們,但我嘗試的任何內容都將打印出除垃圾或錯誤之外的任何內容。

,我想這樣的嵌入式的foreach語句

​​

但與沒有運氣。

還嘗試訪問$ array [$ i] [$ i];或$ array [$ i] [$ ii];拋出一個錯誤錯誤的偏移0

我確定會有類數組索引的問題實際上被命名爲類名,但我想我仍然可以使用數字索引。

基本上我對如何訪問數據感到十分困惑,並可能在正確的方向上使用一個點。

我需要能夠獲取類名,然後獲取該類下的所有函數名稱,並且需要能夠在整個程序中的不同位置通過從數組中檢索它們來訪問它們。

謝謝

我不喜歡回答我的問題,要求別人的幫助只是分鐘後。我感覺好像浪費了你的時間。

你們是對的foreach,但這是一個棘手的。問這個問題在通過我需要找到的東西來談論自己時有點幫助,所以問題出現在我身上。

這個數組有3層。有一個包含3個數組的數組,每個數組都有一個字符串,而不是數字的索引。他們每個人都包含自己的元素。

所以我不得不遍歷數組1,2,3獲得每個元素的字符串索引,然後使用該字符串元素和數字元素來獲取最內層數組的內部元素。好吧,讓我感到困惑,但這裏的代碼適合我,使用echo和一些輕微的格式,所以我可以看到它的工作。

$size = sizeof($objectList); 
for($i = 0; $i < $size; $i++){ 
    foreach($objectList[$i] as $key => $val){ 
     $className = $key; 
     echo $className . ": <br/>"; 
     foreach($objectList[$i][$className] as $val){ 
      $functionName = $val; 
      echo $functionName . " , "; 
     } 
    echo "<br/><br/>"; 
    } 
} 

導致在

namethis_whatever_I_want: another_function,whatever_function,

tc_class_simplevar: set_var_test,get_var_test,

another_freekin_class: some_function,another_crazy_function,

對於任意子另外如果它有幫助,這裏的標記版本與我的數組和變量名稱進行比較。我會說這種方式是最乾淨的,它刪除了幾行代碼。

foreach($objectList as $objects){ 
    foreach($objects as $classname => $functions){ 
     $cn = $classname; 
     foreach($functions as $functionname){ 
      $fn = $functionname; 
     } 
    } 
} 

謝謝您的幫助:-)

回答

7

foreach還允許您指定迭代器的一個關鍵部分,所以你可以通過關聯數組的循環:

foreach($array as $key => $val){ 
    echo $array[$key]; // prints $val 
} 

所以,你的情況:

foreach($rootarray as $classarray){ 
    foreach($classarray as $classname => $functions){ 
     // $classname contains the name of the class 
     foreach($functions as $functionname){ 
      // $functionname contains the name of the function 
     } 
    } 
} 
+0

感謝馬克,我編輯了我的問題,以顯示我在哪裏弄清楚了,但基本上我最終得到的結果與您在外面只使用for循環的結果類似。我會用3個foreach循環來嘗試它,因爲它看起來比我有更好的。 – Ian

+0

真棒標記!謝謝!你的方式完美地工作,它看起來比我的更好。在第二個foreach中,「$ classarray」應該是第一個$ val。但非常感謝你的出色貢獻:-) – Ian

0

foreach是你的朋友:

foreach($array as $key => $value) echo('$array['.$key.'] = '.$value); 
相關問題