Проблема с отображением комбинированного списка

Я столкнулся с проблемой …. Пожалуйста, помогите мне ..

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

$teamslist = BAL@DET,WAS@SF,LA@STL,LAA@KC;
$string = BAL,WAS,LA,LAA,DET,SF,STL,KC;

То, что я хочу, это проверить, что $ string — это элемент, найденный в $ teamlist, а не отображение всего имени в $ teamlist …

например:

я имею «BAL» в $ string, я хочу проверить погоду, если он найден в $ teamlist … если он найден, то результат должен быть

$result will be = BAL@DET

Код, который я использую, работает для одного условия, но не для 2-го условия … ЕСЛИ БАЛ найден перед знаком @, его результат отображается правильно … но если он найден после знака @, он иногда отображает букву или ничего … пожалуйста помогите мне решить мою вторую проблему … что если слово перед или после знака @, оно отображает правильный результат для обоих …

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

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() и в этом случае:

Редакция: из-за того, что полоски могут создавать ложные совпадения, взорвать команды, и вместо этого.

$teamslist = 'BAL@DET,WAS@SF,LA@STL,LAA@KC';
$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);
1

Другие решения

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

$teamslist = 'BAL@DET,WAS@SF,LA@STL,LAA@KC,FOO@BAR';
$string = 'BAL,WAS,LA,LAA,DET,SF,STL,KC';

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

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

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

var_dump($result);

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

array (size=4)
0 => string 'BAL@DET' (length=7)
1 => string 'WAS@SF' (length=6)
2 => string 'LA@STL' (length=6)
3 => string 'LAA@KC' (length=6)
1

$teamslist = "BAL@DET,WAS@SF,LA@STL,LAA@KC";
$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('/(^|,)([^@]+@' . $escaped. '|' . $escaped . '@[^@]+)($|,)/iU',
$teamslist, $matches))
$result[$str] = $matches[2];
}
var_dump($result);

Результат

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

Значения являются массивами на случай, если будет несколько команд с одинаковыми частями.

1
По вопросам рекламы [email protected]