2013-07-30 69 views
0

抱歉提出了很多問題 - 我今天寫了很多代碼,然後開始一次調試。數組的foreach元素,執行函數

我想通過一個函數運行數組中的每個元素,所以我選擇了做一個「foreach」循環。這裏是我的代碼:

//Set up mod and polarity associative arrays 


$mod_array = array(

"image_mod1" =>  "$page_mod1", 
"image_mod2" =>  "$page_mod2", 
"image_mod3" =>  "$page_mod3", 
"image_mod4" =>  "$page_mod4", 
"image_mod5" =>  "$page_mod5", 
"image_mod6" =>  "$page_mod6", 
"image_mod7" =>  "$page_mod7", 
"image_mod8" =>  "$page_mod8" 

); 

$polarity_array = array(

"image_polarity1" => "$page_polarity1", 
"image_polarity2" => "$page_polarity2", 
"image_polarity3" => "$page_polarity3", 
"image_polarity4" => "$page_polarity4", 
"image_polarity5" => "$page_polarity5", 
"image_polarity6" => "$page_polarity6", 
"image_polarity7" => "$page_polarity7", 
"image_polarity8" => "$page_polarity8" 

); 


foreach($mod_array as $string) 
{ 
    convertImageMod($string); 
} 

foreach($polarity_array as $string) 
{ 
    convertImagePolarity($string); 
} 

然而,當我回聲字符串(echo $page_polarity6;),即回聲文字,彷彿尚未應用的功能。

這裏是我的函數定義:

function convertImageMod($string) 
{ 
$string = preg_replace('/\s+/', '', $string); 
$string = str_replace("'", "", $string); 
$stringlength = strlen($string); 
$stringlength -= 3; 
$string = substr ($string, 0, $stringlength); 
$string = strtolower ($string); 
$string = "<img src=\"images/items/{$string}.png\">"; 
return $string; 
} 

function convertImagePolarity($string) 
{ 
$string = "<img src=\"images/items/{$string}.png\">"; 
return $string; 
} 

我不能做的事情嗎?

謝謝!

+0

除非您使用引用,否則需要將函數的結果重新分配到數組中。 – Barmar

+0

即使您確實分配了結果,它也會更改數組,而不是其數值在數組中的變量。 – Barmar

+2

順便說一句,你不需要把變量放在數組賦值中的引號內。 – Barmar

回答

2

使用foreach -loop與reference&以結果應用到陣列。例如:

foreach($mod_array as &$string){ 
//     ^this 
    $string = convertImageMod($string); 
// also, you need to assign return value of a function 
// to the current loop element ($string in this case). 
} 

或使用array_map()函數。示例:

$mod_array = array_map('convertImageMod', $mod_array); 

第二種方法效率較低,消耗的內存也較多。

+0

完美地工作,我會在6分鐘內接受這個答案哈哈。 我使用了頂級的代碼。 此外,如果我執行 $ array2 = array_filter($ array1); 將數組2與數組1相同,刪除空值? – SteelyDan

+0

@SteelyDan是的。這將是。 – BlitZ

3

該函數可能對字符串做了一些事情並將其返回(猜測,如果沒有看到函數定義,我不能確定)。由於你沒有對返回值做任何事情,所以你放棄了函數返回的任何東西,因此你最終得到的字符串不變。

您可以pass the arguments via reference

或者存儲返回的結果數組中:

foreach ($mod_array as $key=>$val) { 
    $mod_array[$key] = convertImageMod($val); 
}