2012-03-10 124 views
0

我遇到麻煩陣列的工作權利的時候,讓我告訴你這裏PHP數組問題循環和呼應

function scanArray(){ 
$al = sizeof($_userLoaders); 
echo $al. "<br />"; 
for ($tr = 0; $tr <= $al; $tr++) { 
echo "value: " .$tr. "<br />"; 
echo $_userLoaders[$tr]; 


} 



} 

//Fetch user's loaders. 

$_userLoaders; 

function get_user_loaders(){ 

     $con = connectToMySQL();//connects to my_sql 

     mysql_select_db("my_database", $con);//connect database 

     $t = mysql_query("SELECT * FROM someTable 
     WHERE value_a=".$_SESSION['value_a']." AND value_b=someValue"); 
     $x= 0; 
     //lets loop through the results and create an array to compare later. 
      while ($result = mysql_fetch_array($t)){ 
      $_userLoaders[$x] = $result['value_c']; 
       $x++; 
      } 
     //lets get all the options for 
     print_r($_userLoaders);//this part prints what it should 
scanArray(); 
} 

沒關係的代碼,我最小化上面的代碼給你看這是怎麼回事。很多功能get_user_loaders()工程很好。它從數據庫中的表中提取數據,並返回它應該的內容。其次,它使數組擺脫它。再一次,這部分工作很好。當print_r()方法被調用它打印什麼應該,這裏有它打印的內容示例:

Array ([0] => tableValue) 

是的,在這一點上,它只有一個值,請注意,這個值可以從任何數值變化到100這就是我使用數組的原因。在這種情況下,我用一個值來測試它。

現在,我撥打電話scanArray()它不回顯值。

scanArray()功能呼應了以下內容:

0 
value: 

所以我不明白的是爲什麼它打印出來,但它並沒有顯示功能?提前致謝。

+0

$ _userLoaders沒有在scanArray中定義,並且你有一個錯誤 - 'for($ tr = 0; $ tr <= $ al - 1; $ tr ++){' – botzko 2012-03-10 22:47:14

回答

2

你的問題是$_userLoaders變量被聲明在函數之外,函數scanArray對此一無所知。您需要或者通過該變量作爲參數:

function scanArray($_userLoaders) { 
    ... 
} 

在末端的呼叫是

scanArray($_userLoaders); 

或備選地聲明變量作爲global函數內部:

function scanArray($_userLoaders) { 
    global $_userLoaders; 
    ... 
} 
+0

啊,我明白了。我習慣在函數之外聲明它,就像在javaScript中一樣,讓它自動成爲全局的。我不知道你必須聲明它是一個全局變量。那麼謝謝你們兩位先生們。我想我會通過它的參數,因爲有很多其他的PHP頁面將一起工作。再次感謝! – 2012-03-10 22:50:21

1

這將是因爲$ _userLoaders不等於scanArray()函數中的任何內容。雖然它不是好的做法,你可以添加一行:

global $_userLoaders; 

您scanArray()函數,它使用全局變量,然後所有其他功能,它應該工作。