логика кода на opencart 2

232
10 декабря 2016, 10:06

не могу понять логику кода из opencart 2, ...

class Request {
public $get = array();
public $post = array();
public $cookie = array();
public $files = array();
public $server = array();
public function __construct() {
    $this->get = $this->clean($_GET);
    $this->post = $this->clean($_POST);
    $this->request = $this->clean($_REQUEST);
    $this->cookie = $this->clean($_COOKIE);
    $this->files = $this->clean($_FILES);
    $this->server = $this->clean($_SERVER);
}
public function clean($data) {
    if (is_array($data)) {
        foreach ($data as $key => $value) {
            unset($data[$key]);
            $data[$this->clean($key)] = $this->clean($value);
        }
    } else {
        $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
    }
    return $data;
}
}

а точнее, этот кусок ...

public function clean($data) {
    if (is_array($data)) {
        foreach ($data as $key => $value) {
            unset($data[$key]);
            $data[$this->clean($key)] = $this->clean($value);
        }
    } else {
        $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
    }
    return $data;
}
Answer 1

Это называется рекурсивная функция.

Смысл: отфильтровать все элементы находящиеся в массивах, независимо от вложенности массива.

Условие гласит: перебирать элементы массива (многомерного массива) до тех пор, пока не будет встречено конечное значение отличное от массива, если значение не является массивом, тогда применить функцию htmlspecialchars к данным.

Представим что есть массив данных:

[
   1 => 'test'
   2 => ['test1', 'test2']
]

Благодаря этому коду будут обработаны все элементы (test, test1, test2) как значения и не важно сколько массивов будет вложено в друг друга, ко всем значениям массива будет применена функция htmlspecialchars.

READ ALSO
Несколько условий

Несколько условий

Привет! Ситуация в следующем, хочу сделать красиво условие а получается какой то говнокод)

299
Обработка нескольких checkbox с одним и тем же name

Обработка нескольких checkbox с одним и тем же name

Доброго времени! У меня такая задача - на странице циклом php выводится в форме разное количество чекбоксов например так

351
DateTime: Баг или фича?

DateTime: Баг или фича?

функция должна выводить количество дней между $d1 и unixtimestamp (1475107200)

216
Большой POST запрос

Большой POST запрос

Бьюсь второй день над следующей задачей: есть база данных адресов типа "область", "город", "улица", "дом" и тд

327