2014-12-04 3 views
3

문자열을이 클래스에 전달할 때 Ajax 호출을 통해 PHP에 전달 된 문자열을 살균하는 클래스를 작성하고 있지만 제대로 작동하지만 참조로 배열을 전달하면 작동하지 않습니다.PHP 배열을 참조로 전달합니다.

class Sanitize { 

    public static function clean (&$str) { 
     self::start($str); 
    } 

    public static function cleanArray (&$array) { 
     if (self::arrayCheck($array)) { 
      foreach ($array as $key => $value) { 
       if (self::arrayCheck($value)) { 
        self::cleanArray($value); 
       } else { 
        self::clean($value); 
       } 
      } 
     } else { 
      throw new Exception ('An array was not provided. Please try using clean() instead of cleanArray()'); 
     } 
    } 

    private static function start (&$str) { 
     $str .= '_cleaned'; 
    } 

    private static function arrayCheck ($array) { 
     return (is_array($array) && !empty($array)); 
    } 
} 

시험 코드 :

$array = array(
    'one' => 'one', 
    'two' => 'two', 
    'three' => 'three', 
    'four' => 'four' 
); 
echo print_r($array, true) . PHP_EOL; 
Sanitize::cleanArray($array); 
echo print_r($array, true) . PHP_EOL; 

출력 :

Array 
(
    [one] => one 
    [two] => two 
    [three] => three 
    [four] => four 
) 

Array 
(
    [one] => one 
    [two] => two 
    [three] => three 
    [four] => four 
) 

내가 놓친 거지 뭔가가 있나요, 아니면 PHP에서 둥지를 참조 패스에 불가능하다?

+2

나는 foreach를 할 때 참조를 잃어 버릴 것입니다. foreach ($ array = $ & array $ array) – Erik

+0

오 완벽한 표현입니다. 치명적인 오류가 발생하는 '& key'에서 작동하지 않지만 값을 참조로 전달할 수 있습니다. 감사합니다. 답으로 게시하여 받아 들일 것입니다. –

+0

참조로 매개 변수를 전달하지 마십시오. 시간의 99 %가 더 좋은 방법입니다. – Konstantin

답변

4

foreach 내에서 참조가 손실됩니다. 그것을 변경하면 작동합니다 :

foreach($array as $key => &$value) { 
4

코드는 $array을 수정하지 않으며 $value을 수정합니다.

두 가지 방법이 있습니다. 하나는 foreach ($array as &$value)이고 다른 하나는 루프 내부에서 $array[$key]을 수정하는 것입니다.

관련 문제