CakePHP: использовать класс Inflector для всего массива - PullRequest
1 голос
/ 29 июня 2011

Мне нужно использовать Inflector::slug() для всех результатов, извлеченных из моей базы данных, которые, конечно, извлекаются в массиве.Возможно ли это как-нибудь, или мне нужно будет зациклить каждый результат и убить его?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

PHP * функция array_map() может делать то, что вам нужно (хотя она предполагает простой индексированный массив).

array_map( 'Inflector::slug', $your_result )

Если вы смотрите на что-то более сложное, служебный класс CakePHP Set может быть полезен в многошаговой реализации.

Я не пробовал это в контексте CakePHP (то есть, отображая с помощью метода класса CakePHP), но я не могу представить себе причину, по которой это не сработает. Может быть, это, по крайней мере, поможет вам начать.

0 голосов
/ 30 июня 2011

В зависимости от массива вы можете использовать array_walk или array_walk_recursive.

Примерно так должно работать.

Это для 5.3 +;

array_walk_recursive($posts, function(&$value) {
    $value = Inflector::slug($value);
});

Если вы хотите ограничить его определенным полем, вы также можете сделать что-то вроде этого:

array_walk_recursive($posts, function(&$value, $key) {
if ($key == 'title') {
    $value = Inflector::slug($value);
  }
});

Я давно не использовал Cake, но, как сказал Роб Уилкерсон, вы можете обнаружить, что Set класс может облегчить работу.

...