2016-03-18 16 views
0

yılında Dizi Değerler gelen alt dizeleri eşleşti:Arama ve İade böyle bir dizi var PHP

0 => dsadjdasActionsdadas | 123 4Dramdsadsa 
1 => dsakjdsa Crime dasdsadas Sci-Fci 
2 => dasjhdashkAdventuredsadsasa 

ben "Eylem" dışında her şeyi kırpmak istiyorum "Dram", "Suç", "Bilim FCI" Dizinin anahtar değerlerini böyle bir şeye değiştirmek için "Adventure" ve "|". Büyük/küçük harfe duyarlı olmalı.

0 => Action | Dram 
1 => Crime | Sci-Fci 
2 => Adventure 
+1

tam olarak başarmak için çalışıyoruz ne. Şu andan itibaren, basit dize işlevleri (ör. Strpos() 'ile birleştirilmiş olan" substr() ") yapacaktır. Daha karmaşık hale geliyorsa, bir regex gerekebilir - ama ne istediğinizi daha kesin. – Jan

cevap

0

Basit çözüm:

$arr = [ 
    0 => 'dsadjdasActionsdadas | 123 4Dramdsadsa', 
    1 => 'dsakjdsa Crime dasdsadas |Sci-Fci', 
    2 => 'dasjhdashkAdventuredsadsasa' 
]; 

$result = array_map(function($v){ 
    preg_match_all("/(Action|Dram|Crime|Sci-Fci|Adventure|\|)+?/", $v, $matches); 
    return implode(' ',$matches[0]); 
}, $arr); 


var_dump($result); 
// the output: 
array (size=3) 
    0 => string 'Action | Dram' (length=13) 
    1 => string 'Crime | Sci-Fci' (length=15) 
    2 => string 'Adventure' (length=9) 
0

ben sonuç olacak bu size

$array = array("dsadjdasActionsdadas | 123 4Dramdsadsa", "dsakjdsa Crime | dasdsadas Sci-Fci", "dasjhdashkAdventuredsadsasa"); 
print_r($array); 
$clean_array = array_map('cleanGenre', $array); 
print_r($clean_array); 

function cleanGenre($text) 
{ 
    $genres = array('Action', 'Adventure', 'Crime', 'Dram', 'Sci-Fci'); 
    $parts = explode("|", $text); 
    $result = array(); 
    foreach($parts as $part) 
     foreach($genres as $genre) 
      if (preg_match("/". $genre. "/i", $part)) 
       $result[] = $genre; 
    return (implode(' | ', $result)); 
} 

yardımcı olur umarım: Ben ekledikten

Array 
(
    [0] => dsadjdasActionsdadas | 123 4Dramdsadsa 
    [1] => dsakjdsa Crime | dasdsadas Sci-Fci 
    [2] => dasjhdashkAdventuredsadsasa 
) 
Array 
(
    [0] => Action | Dram 
    [1] => Crime | Sci-Fci 
    [2] => Adventure 
) 

Note '|' $ dizi sembolü [1]

Bu benim ilk mesajım! preg_match_all, array_map ve implode fonksiyonları ile