Масив строк, заменить все символі на знаки вопроса

Кощей

if(!$needle) die("ooh");
Масив строк, заменить все символі на знаки вопроса

мне нужно пройтись по масиву и во всех строках заменить символы которые несоответствуют маске /[a-zа-я!\-.,]/i заменить на знако вопроса. при этом заменины нужно сделать и в ключах. на выходе нужно получить масив такойже структуры но уже с заменами. что посоветуете
 

Армян

Новичок
А в чем проблема ? почему бы не сделать цикл и в цикле preg_replace'ом заменять значения и ключи и класть результат в новый массив в том же порядке, вроде должно получится то что надо, если я правильно понял задачу.
 

Кощей

if(!$needle) die("ooh");
Учитывая что масив может быть произвольный, со вложеными подмасивами

-~{}~ 02.08.08 14:27:
PHP:
function replace_bad($arr){
	
	if(is_array($arr)){
		foreach($arr as $k => $a){
			$arr[$k] = replace_bad($a);
		}
	}else{
		return preg_replace("/[^a-z0-9\-.,!]/i", "?", $arr);
	}

	
	return $arr;
}
-~{}~ 02.08.08 14:27:

А как с ключами быть
 

Армян

Новичок
сделать ф-ю которая будет решать задачу с одномерным массивом, затем напрягать мозги чтобы она обрабатывала массив рекурсивно.

-~{}~ 02.08.08 17:31:

Клади в новый массив с уже измененными ключами, т.е. както так
PHP:
$k = preg_replace("/[^a-z0-9\-.,!]/i", "?", $k);
$new_arr[$k] = replace_bad($a);
 

Кощей

if(!$needle) die("ooh");
Обрабатывать рекурсивно нет проблем. Есть проблема с заменой ключей, как их безболезнено заменить несоздавая новый масив

-~{}~ 02.08.08 14:32:

Армян
а где новый масив хранить между вызовами
 

Армян

Новичок
Второй параметр в ф-ии сделать можно replace_bad($arr, &$new_arr = null);

В начале проверять если пусто то = array(); и при вызове ф-ии в теле передавать массив
 

Кощей

if(!$needle) die("ooh");
А все дошло) вообще просто вышло:
PHP:
function replace_bad($arr){
	
	if(is_array($arr)){
		foreach($arr as $k => $a){
			$k = replace_bad($k);
			$r[$k] = replace_bad($a);
		}
	}else{
		$r = preg_replace("/[^a-z0-9\-.,!]/i", "?", $arr);
	}
	
	return $r;
}
что-то плохо соображаю еще с утра, нада чайку пойти попить)
 
Сверху