#php #replace
#php #заменить
Вопрос:
Как вы заменяете все несовпадения из одного массива, которые не определены в другом массиве, я вроде как заработал, но это не совсем правильно. как я вам покажу.
результат есть, но неверный.
- - £ 8 - - - - - - - -
Требуемый результат должен быть
£ 8 - -
вот как выглядит мой код
$vals_to_keep = array(8, 'y', '£');
$replace_if_not_found = array('£', 8, '#', 't'); // replace if not in above array
$result = '';
foreach ($replace_if_not_found as $d) {
foreach ($vals_to_keep as $ok) {
if(strcmp($d, $ok) == 0){
$result .= $d . " ";
}else
$result .= str_replace($d, $ok ,'-') . " ";
}
}
echo $result;
Ответ №1:
используйте in_array http://php.net/manual/en/function.in-array.php
foreach ($replace_if_not_found as $d) {
if (in_array($d, $vals_to_keep))
$result .= $d . " ";
else
$result .= str_replace($d, $ok ,'-') . " ";
}
Ответ №2:
Вы можете перебирать все элементы, $replace_if_not_found
заменяя их на -
, или нет, в зависимости от обстоятельств.
Использование замыкания в PHP 5.3 или выше
$result = array_map(function($item) use ($vals_to_keep) {
return in_array($item, $vals_to_keep, TRUE) ? $item : '-';
}, $replace_if_not_found);
echo implode(' ', $result);
Использование цикла foreach
$result = array();
foreach ($replace_if_not_found as $item) {
if (in_array($item, $vals_to_keep, TRUE)) {
$result[] = $item;
} else {
$result[] = '-';
}
}
echo implode(' ', $result;
Комментарии:
1. что случилось с array_pad array_intersect сформируйте свой первый ответ, это было очень аккуратное решение
2. это не будет работать для массивов, таких как
array('£', 8, 'a', 'b', '£')