2013-07-30 4 views
0

많은 질문을하는 것에 대해 사과드립니다. 오늘 많은 코드를 작성한 다음 한꺼번에 디버깅을 시작했습니다.배열의 foreach 요소 인

함수를 통해 배열의 각 요소를 실행하려고하므로 "foreach"루프를 선택했습니다. 내가 문자열 (echo $page_polarity6;)를 에코 때

//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); 
} 

그러나, 메아리 텍스트 기능이 적용되지 않은 것처럼입니다 : 여기 내 코드입니다. 내가 여기서 일을하지

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); array2는 array1과 동일 할 것입니다. 빈 값이 제거 되었습니까? – SteelyDan

+0

@SteelyDan 예. 그것은 될 것입니다. – BlitZ

3

이 함수는 아마도 문자열에 뭔가를하고 그것을 반환합니다 (추측하여 함수 정의를 보지 않고는 알 수 없습니다). 반환 값으로 아무 것도하지 않으므로 함수가 반환하는 모든 내용을 버려서 문자열을 변경하지 않고 끝냅니다.

은 당신이 중 하나 pass the arguments via reference

또는, 당신의 배열에 반환 된 결과를 저장할 수 있습니다 :

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