php заменяет несовпадения из двух массивов

#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', '£')