2014-10-03 2 views
1

я обращенную проблема .... Пожалуйста, помогите мне ..Проблема с отображением объединенного списка

У меня есть 2 строки:

$teamslist = [email protected],[email protected],[email protected],[email protected]; 
$string = BAL,WAS,LA,LAA,DET,SF,STL,KC; 

Что я хочу, чтобы проверить $ строку это элемент находится в $ teamslist, чем его дисплей все имя в $ teamslist ...

например:

у меня есть "BAL" в $ строки, я хочу, чтобы проверить погоду его нашли в $ teamlist ... если его нашли, чем результат должен быть

$result will be = [email protected] 

код, который я использую работает для одного состояния, но не для 2-го состояния .. IF BAL найден до знака @, его отображение правильного результата .., но если его обнаружено после знака @, оно отображает когда-нибудь письмо или ничего. Пожалуйста, помогите мне решить мою вторую проблему ... Это, если слово либо до @ или после знака @, это отображать правильный результат для обоих ...

Надежда это понять мою проблему .. код я пытаюсь это:

foreach($string as $tag) 
{        
     $teamslisto = substr($teamslist, strpos($teamslist, $tag)+strlen($tag)); 
     $teamslisto2 = substr($teamslist, strpos($teamslist, $tag) - strlen($tag) -1); 
     $final=explode(",",$teamslisto); 
     $final2=explode(",",$teamslisto2); 

      if($final['0']=="") 
      { 
       $opkplay = $final2['0']; 
      } 
      else 
      { 
       $opkplay = $tag.$final['0']; 
      } 
} 

Пожалуйста, помогите мне ....

ответ

1

Вы также можете использовать stripos() в этом случае тоже:

Редакция: Это stripos может сделать ложные спички взрываются команды, и в массиве вместо.

$teamslist = '[email protected],[email protected],[email protected],[email protected]'; 
$string = 'BAL,WAS,LA,LAA,DET,SF,STL,KC'; 

$teamslist = explode(',', $teamslist); 
$string = explode(',', $string); 

$result = array(); 
foreach($string as $tag) { 
    foreach($teamslist as $teams) { 
     $temp = explode('@', $teams); 
     if(in_array($tag, $temp)) { 
      $result[$tag] = $teams; 
     } 
    } 
} 

echo '<pre>'; 
print_r($result); 
+0

Хорошо, но хорошо, но его там все равно, что это можно сделать так же, как я написал код выше ... cz У меня уже столько циклов foreach, поэтому я не добавлю новый снова .... – DeDevelopers

+0

@DeDevelopers нет, две петли в этом ответе прекрасны, поскольку как '$ teamslist', так и' $ string' должны быть взорваны, и вам нужно проверить каждый список команд для каждой взорванной '$ string' – Ghost

+0

. Ваш код найдет 'LA' в' LAA @ KC' - не думаю, что это правильно – Cheery

1

Вы можете попробовать его с preg_match():

$teamslist = '[email protected],[email protected],[email protected],[email protected],[email protected]'; 
$string = 'BAL,WAS,LA,LAA,DET,SF,STL,KC'; 

$persons = explode(',', $string); 
$result = array(); 

foreach($persons as $person) { 
    if(preg_match('/' . $person . '@[^@,]+|[^@,][email protected]' . $person . '/', $teamslist, $match) === 0) 
     continue; 

    if(in_array($match[0], $result) === false) 
     $result[] = $match[0]; 
} 

var_dump($result); 

Это приведет:

array (size=4) 
    0 => string '[email protected]' (length=7) 
    1 => string '[email protected]' (length=6) 
    2 => string '[email protected]' (length=6) 
    3 => string '[email protected]' (length=6) 
1
$teamslist = "[email protected],[email protected],[email protected],[email protected]"; 
$string = "BAL,WAS,LA,LAA,DET,SF,STL,KC"; 


$strings = explode(',', $string); 
$result = array(); 
foreach($strings as $str) 
{ 
    $escaped = preg_quote($str); // just in case.. 
    if (preg_match_all('/(^|,)([^@][email protected]' . $escaped. '|' . $escaped . '@[^@]+)($|,)/iU', 
        $teamslist, $matches)) 
    $result[$str] = $matches[2]; 
} 
var_dump($result); 

Результат

array(8) { 
    ["BAL"]=> 
    array(1) { 
    [0]=> 
    string(7) "[email protected]" 
    } 
    ["WAS"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
    ["LA"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
    ["LAA"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
    ["DET"]=> 
    array(1) { 
    [0]=> 
    string(7) "[email protected]" 
    } 
    ["SF"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
    ["STL"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
    ["KC"]=> 
    array(1) { 
    [0]=> 
    string(6) "[email protected]" 
    } 
} 

Ценности - это массивы на всякий случай, если будет несколько команд с теми же частями.

Смежные вопросы