2011-10-02 4 views
0

다른 배열 내에서 정의되지 않은 배열의 모든 일치 항목을 대체하려면 어떻게해야합니까? 정확히 맞지는 않습니다. 내가 너에게 보여줄대로.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; 

답변

0

당신은 $replace_if_not_found의 모든 항목에 걸쳐 루프 -로 대체, 또는 수 없었다, 적절한. foreach는 루프를 사용하여 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); 

위의 폐쇄를 사용

$result = array(); 
foreach ($replace_if_not_found as $item) { 
    if (in_array($item, $vals_to_keep, TRUE)) { 
     $result[] = $item; 
    } else { 
     $result[] = '-'; 
    } 
} 
echo implode(' ', $result; 
+0

와 in_array 그 첫 번째 대답은 매우 깔끔했습니다. – david

+0

array ('£', 8, 'a', 'b', '£')와 같은 배열에서는 작동하지 않습니다. – salathe

1

사용는 array_intersect 폼 요 array_pad에 무슨 일이 있었는지 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 ,'-') . " "; 
} 
관련 문제