2016-07-18 4 views
0

내가 배열 $track['context']이이 다음는 preg_match 배열 문자열 교체

常州, 的, 妈咪ZA, 已揽件快件已从, 常州, 发出快件到达 

이러한 세부 사항을 추적하는 각각의 하나를 출력합니다. 내가 $badWords에서 문자열은 모든

$badWords = ['常州', '的']; // I would want these to end up being ['one', 'two'] 
$arrayToCheck = $track['context']; 
foreach ($badWords as $badWord) { 
    if (preg_match("/($badWord)/", $arrayToCheck)) { 
     // Do I run my preg_match function here? 
    } 
} 
+0

에서 실행을 참조하십시오 : 코드에서 오류가 발생합니다. (1) * $ badWords *는 배열이 아니므로'foreach'가 작동하지 않습니다. (2) * arrayToCheck *는 문자열이 아니므로 * preg_match *가 작동하지 않습니다. – trincot

+0

어쩌면 나는 더 잘 설명해야한다. 어떻게하면'$ badWords = '常州 的';를 배열로 만들고 그것을 바꿀 적절한 문자열로'foreach'를 통해 그것을 실행시킬 수 있을까요? – NooBskie

+0

'常州 的'를 배열로 바꾸려면 :'[ '常州 的']', 더 많은 단어가 있으면 쉼표로 구분하십시오. – trincot

답변

1

나쁜 단어에 대한 데이터 구조를 제안합니다. 여기서 단어는 키이고 대체 값은 연관 배열의 값입니다.

그런 다음 당신은 당신의 콘텐츠 배열을 통해 루프, 콜백 기능을 대체 할 수 있었다 :

// Sample data: 
$track['context'] = array(
    'qdf 常州', 
    'fdhlkjfq fdkq ', 
    '的 fdsqfsf' 
); 
// Make a translation table for the bad words: 
$badWords = [ 
    '常州' => 'one', 
    '的' => 'two' 
]; 
// Build a regular expression that matches any of the above words: 
$regexp = "/\b(" . implode('|', array_map('preg_quote', array_keys($badWords))) . ")\b/u"; 

// Iterate over the content 
foreach ($track['context'] as &$subject) { 
    $subject = preg_replace_callback($regexp, function($matches) use ($badWords) { 
     // Replace the matched bad word with what we have mapped for it: 
     return $badWords[$matches[0]]; 
    }, $subject); 
} 
// Output results: 
print_r ($track['context']); 

*이 * "나는 다음과 같은 코드를 통해 배열을 실행하고"이 eval.in

0

먼저 존재하면 다음 교체 시도하고 $track['context'] 내부의 각 항목에 대한 preg_match를 실행하려면 다음 코드를 통해 배열을 실행하고

, $ BADWORDS을 같은 배열 :

$badWords = array('bad_word1', 'bad_word2'); 

둘째, I는 다른 하나의 내부 문자열의 발생을 발견하는 데 사용되는 strpos 함수를 사용한다.

마지막으로 코드에서 $ noBadWordsFound를 false로 설정해야합니다.