Я столкнулся с проблемой …. Пожалуйста, помогите мне ..
У меня есть 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'];
}
}
Пожалуйста, помогите мне….
Вы также можете использовать 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);
Вы можете попробовать это с 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)
$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"}
}
Значения являются массивами на случай, если будет несколько команд с одинаковыми частями.