Подтвердить что ты не робот

Array_map для многомерных массивов

Я пытаюсь найти решение для использования array_map('mysql_real_escape_string', $data); для многомерных массивов. Если $data является многомерным, php возвращает ошибку. приветствия

4b9b3361

Ответ 1

$array = array( array('A' => "Hello", 'B' => "World"),
                array('A' => "Goodnight", 'B' => "Vienna")
              );

function myFunc(&$item, $key) {
    $item = mysql_real_escape_string($item);
}

array_walk_recursive($array,'myFunc');

var_dump($array);

Ответ 2

function realEscape($data){
    global $connection;
        $array=[];
  do{

    if(is_string($data)){
        $array= mysqli_real_escape_string($connection,$data);
       break; 
    }


foreach($data as $key =>$value){
      $array[$key]=is_array($value)?realEscape($value):mysqli_real_escape_string($connection,$value);  
}


}while(0);
return $array;}

Простое решение подходит где угодно. Приветствия!

Ответ 3

Вы также можете использовать minwork/array, чтобы легко отобразить любой многомерный массив.

Самое большое преимущество этого решения по сравнению с нативными функциями заключается в том, что вы также можете отобразить многомерные массивы с различной глубиной вложения, также обращаясь к их ключам, например:

$array = [
    1 => [
        2 => 'a',
        3 => 'b',
        4 => [
            5 => 'c',
        ],
    ],
    'test' => 'd',
];

$callback = function ($keys, $value) {
    return implode('.', $keys) . " -> {$value}";
}

Arr::map($array, $callback, Arr::MAP_ARRAY_KEYS_ARRAY_VALUE) ->
[
    1 => [
        2 => '1.2 -> a',
        3 => '1.3 -> b',
        4 => [
            5 => '1.4.5 -> c',
        ],
    ],
    'test' => 'test -> d',
]

В вашем случае вы можете просто применить функцию mysql_real_escape_string (без изменения входного массива) к каждому элементу, подобному этому (независимо от того, насколько глубоко каждый элемент вложен)

$escapedData = Arr::map($data, function ($value) {
    return mysql_real_escape_string($value);
}, Arr::MAP_ARRAY_VALUE_KEYS_LIST);