【问题标题】:Issue with displaying a combined list显示组合列表的问题
【发布时间】:2014-11-28 05:39:35
【问题描述】:

我遇到了一个问题....请帮助我..

我有 2 个字符串:

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

我想要检查 $string 是在 $teamslist 中找到的元素,而不是在 $teamslist 中显示整个名称...

例如:

我在 $string 中有 "BAL",我想检查它在 $teamlist 中找到的天气...如果找到了,结果应该是

$result will be = BAL@DET

我正在使用的代码适用于一种条件,但不适用于第二种条件...如果在 @ 符号之前找到 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'];
            }
}

请帮帮我……

【问题讨论】:

    标签: php arrays list foreach


    【解决方案1】:

    在这种情况下你也可以使用stripos()

    修订: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);
    

    【讨论】:

    • 好的,这很好,但无论如何它可以用我在上面发布代码的相同方式完成......因为我已经有很多 foreach 循环所以我不包括一个新的再次......
    • @DeDevelopers 不,这个答案中的两个循环很好,因为 $teamslist$string 都必须展开,并且您需要检查每个团队列表中的每个展开的 $string
    • 您的代码会在LAA@KC 中找到LA - 不要认为它是正确的
    • @DeDevelopers 你可以试试这个版本
    • 谢谢哥们..我用这种方式并提供了我想要的东西..非常感谢...
    【解决方案2】:
    $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"
      }
    }
    

    值是数组,以防万一有几个团队具有相同的部分。

    【讨论】:

      【解决方案3】:

      你可以试试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)
      

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        相关资源
        最近更新 更多