2012-11-28 30 views
0

中的數組我有這個代碼,並沒有代碼之前,它是指下面看到的任何變量。然而,我仍然無法找到爲什麼我收到錯誤:「首先參數應該是在一個數組...」錯誤:第一個參數應該是在

$array = array("element here for reason"); 

function sortdata() 
{ 
    $File = fopen("Names.txt", "r"); 

    //put each file line into an array element 
    while(!feof($File)) 
    { 
     array_push($array, fgets($File)); 
    } 
} 
+0

哪行號是錯誤消息指? –

回答

4

$array超出範圍的功能。您可以使用global將其帶入示波器。

$array = ..; 
function sortdata() { 
    global $array; 
    ... 
} 
sortdata(); 

或者,您可以通過引用將它傳遞給函數。

$array = ..; 
function sortdata(&$array) { 
    ... 
} 
sortdata($array); 
+0

嘗試,然後在下一行定義$ array,同樣的問題 – Runeony1

+0

試過哪個變化?假設'$ array'是在腳本輸出級聲明的,你可以用這個全局語句把它放到函數的上下文中。如果您正確使用此答案的代碼,則不會有任何問題。 – Vulcan

0

你應該首先嚐試初始化數組,並把陣列功能的範圍內,像這樣:

$array = array(); 
array_push($array, "element here for reason"); 

function sortdata() 
{ 
    global $array; 

    $File = fopen("Names.txt", "r"); 

    //put each file line into an array element 
    while(!feof($File)) 
    { 
     array_push($array, fgets($File)); 
    } 
} 
+0

'$ array'在函數內仍然超出範圍。 – Vulcan

+0

@Vulcan謝謝,修復。 – Kermit

+0

在這一點上,它基本上是我的答案一個較少解釋的變體。 – Vulcan

0

與代碼的問題是,你是不是傳遞$數組變量進入功能。除此之外,使用快捷方式向數組添加項目而不是調用array_push會更有效,因爲它消除了調用函數的開銷。

$array = array("element here for reason"); 

function sortdata($array) 
{ 
    $File = fopen("Names.txt", "r"); 

    //put each file line into an array element 
    while(!feof($File)) 
    { 
     $array[] = fgets($File); 
    } 

    return $array; 
} 
+0

作爲參數傳遞的'$ array'實際上並不包含值,除非通過引用傳遞它。 – Vulcan

+0

這不是事實。被傳遞的$ array變量確實是按值傳遞的。但是,這並不改變它是一個數組變量的事實。 $ array []行會將數據追加到數組中。如果你使用函數的OUTPUT,$ array = sortdata($ array);那麼你將得到更新的$數組。但是,如果你不存儲輸出,那麼你是正確的,$ array的值不會改變。 – EmmanuelG

+0

我只是爲了OP而注意到它,因爲他/她的原始代碼表明該函數沒有返回值。我假設(d)OP的原始代碼不會將輸出存儲到變量中,所以我注意到了這一點。 – Vulcan

0

您可以在函數體中使用變量$ array。在這種情況下,這是局部變量,它會自動設置爲字符串。

爲了使用您的全局變量$ array,您應該在函數中使用指令global

function sortdata() { 
global $array; 
/* there your code for work with $array */ 
} 
0
This give you backward compatibility 

function sortdata(array $array = array()) 
{ 
    $File = fopen("Names.txt", "r"); 

    while(!feof($File)) 
    { 
     array_push($array, fgets($File)); 
    } 


    return $array; 
} 
相關問題