23 Stimmen

array_map für mehrdimensionale Arrays

Ich versuche, eine Lösung zu finden für die Verwendung von array_map('mysql_real_escape_string', $data); bei mehrdimensionalen Arrays, Wenn $data mehrdimensional ist, gibt php einen Fehler zurück. cheers

39voto

Mark Baker Punkte 204969
$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);

0 Stimmen

Wird leider nicht funktionieren, wenn Sie versuchen, die Schlüssel zu ändern

1voto

Minwork Punkte 568

Sie können auch Folgendes verwenden minwork/array um jedes mehrdimensionale Array einfach abzubilden.

Der größte Vorteil dieser Lösung gegenüber nativen Funktionen besteht darin, dass Sie mehrdimensionale Arrays mit unterschiedlicher Verschachtelungstiefe abbilden können, indem Sie z. B. auch auf deren Schlüssel zugreifen:

$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',
]

In Ihrem Fall können Sie einfach Folgendes anwenden mysql_real_escape_string Funktion (ohne Änderung des Eingabefeldes) auf jedes Element wie folgt anwenden (unabhängig davon, wie tief jedes Element verschachtelt ist)

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

0voto

Shahid Muneer Punkte 21
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;}

Eine einfache Lösung, die überall passt. Prost!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X