2013-08-01 2 views
2

단순 배열과 중첩 배열 모두에서 작동하는 함수를 만들려고합니다. 지금까지,이 함수는 다음과 같습니다단순 배열과 중첩 배열에 대해 작동하는 PHP 함수를 만듭니다.

function fnPrepareDataForBrowser($values) 
    { 
    $values = array_map('htmlspecialchars', $values); 
    return $values; 
    } 

그것은 간단한 배열을 위해 잘 작동 - 예를 들면 :

Array 
(
    [Item ID] => 25469 
    [Item Desc] => spiral nails, 1" 
    [Standard Item] => yes 
    [Entry UOM] => lb 
) 

그러나 메시지 "경고와 함께 실패 반드시 htmlspecialchars() 매개 변수 1이 될 것으로 예상 문자열, 배열은 중첩 배열은 "... 주어진 - 예를 들면 : 간단 배열과 중첩 배열 모두 작동 그래서 수정이 기능을해야한다

Array 
(
[0] => Array 
    (
     [Item ID] => 25469 
     [Item Description] => spiral nails, 1" 
     [Standard Item] => yes 
     [Entry UOM] => lb 
    ) 

[1] => Array 
    (
     [Item ID] => 25470 
     [Item Description] => finishing screws, 2.5" 
     [Standard Item] => no 
     [Entry UOM] => lb 
    ) 

[2] => Array 
    (
     [Item ID] => 25576 
     [Item Description] => paint brush, 3" 
     [Standard Item] => no 
     [Entry UOM] => each 
    ) 
) 

?

<?php 
    /** 
    * Applies callback function recursively to every element of the given array. 
    * 
    * If the array contains inner arrays or objects, the callback is also applied 
    * to these. 
    * 
    * Caution: If $arrayOfObject is an object, only public members are processed. 
    * 
    * @param callback  $func 
    * @param array|object $array 
    * 
    * @return array 
    */ 
    public static function array_map_recursive($func, $arrayOrObject) 
    { 
      $array = is_array($arrayOrObject) ? $arrayOrObject : get_object_vars($arrayOrObject); 
      foreach ($array as $key => $val) { 
        $array[$key] = is_array($val) || is_object($val) 
          ? self::array_map_recursive($func, $val) 
          : call_user_func($func, $val); 
      } 
      return $array; 
    } 
?> 

답변

1
function fnPrepareDataForBrowser(& $values) 
{ 
    return is_array($values) ? 
      array_map('fnPrepareDataForBrowser', $values) : 
      htmlspecialchars($values); 

} 

$array = fnPrepareDataForBrowser($your_array); 
2

이 시도해보십시오. 나는 그것을 설명서에서 훔쳤다.

function array_map_recursive($callback, $array) { 
    foreach ($array as $key => $value) { 
     if (is_array($array[$key])) { 
      $array[$key] = array_map_recursive($callback, $array[$key]); 
     } 
     else { 
      $array[$key] = call_user_func($callback, $array[$key]); 
     } 
    } 
    return $array; 
} 
+0

+1 좋은 대답을 생성합니다! – cgTag

1

대신이 array_map_recursive 기능을 사용할 수 있습니다 :

0

이 소송 귀하의 필요합니까?

<?php 

function fnPrepareDataForBrowser(&$values) 
{ 
    $result = array(); 

    foreach ($values as $k => $v) 
    { 
     if (is_array($v)) { 

      array_push($result, array_map('htmlspecialchars', $v)); 
     } 
    } 

    return $result; 
} 


$tst = array(
array (
     'Item ID' => 25469, 
     'Item Description' => "spiral nails & 1", 
     'Standard Item' => 'yes&', 
     'Entry UOM' => 'lb>' 
    ), 

array (
     'Item ID' => 25470, 
     'Item Description' => "finishing screws & 2.5", 
     'Standard Item' => 'no&', 
     'Entry UOM' => 'lb<' 
    ), 

array (
     'Item ID' => 25576, 
     'Item Description' => "paint brush & 3", 
     'Standard Item' => 'no&', 
     'Entry UOM' => 'each&' 
    ) 
); 

$result = fnPrepareDataForBrowser($tst); 

print_r($result); 

이 결과

Array 
(
    [0] => Array 
     (
      [Item ID] => 25469 
      [Item Description] => spiral nails &amp; 1 
      [Standard Item] => yes&amp; 
      [Entry UOM] => lb&gt; 
     ) 

    [1] => Array 
     (
      [Item ID] => 25470 
      [Item Description] => finishing screws &amp; 2.5 
      [Standard Item] => no&amp; 
      [Entry UOM] => lb&lt; 
     ) 

    [2] => Array 
     (
      [Item ID] => 25576 
      [Item Description] => paint brush &amp; 3 
      [Standard Item] => no&amp; 
      [Entry UOM] => each&amp; 
     ) 

)