2013-11-14 3 views
0

У меня есть массив $args. Я хочу изменить некоторые значения в нем.Foreach по ссылке, только некоторые элементы массива

Код

foreach(array($args['key_to_validate'], $args['another_one']) as &$arg) { 
    $arg = validate($arg); 
} 

недействителен согласно PHP Manual и дает ошибку синтаксиса.

Так что я должен делать:

$arguments_to_validate[] =& $args['key_to_validate']; 
$arguments_to_validate[] =& $args['another_one']; 

foreach ($arguments_to_validate as &$arg) { 
    $arg = validate($arg); 
} 

Другой способ:

$argument_keys_to_validate = array('key_to_validate', 'another_one'); 
foreach ($argument_keys_to_validate as $key) { 
    $current_arg =& $args[$key]; 
    $current_arg = validate($current_arg); 
} 

Есть ли более элегантный способ?

ответ

2
foreach (array('key_to_validate', 'another_one') as $key) { 
    validate($args[$key]); 
} 

Убедитесь, что ваша функция validate принимает аргумент по ссылке.

+0

Это выглядит как отличный ответ. Я отредактировал свой оригинальный вопрос, чтобы лучше показать, что я не думал о функции проверки, ссылаясь на ссылку, я просто забыл набрать '$ arg =' before' validate ($ arg) ' –

+0

@HeikkiU,' $ args [$ key] = 'добавлено – sectus

+0

Спасибо, но я думаю, что ваше оригинальное решение было еще более элегантным. –

0

Использовать php 5.5 и первый вариант будет работать. : ^)

Смежные вопросы