【问题标题】:PHP loop and IF conditionPHP循环和IF条件
【发布时间】:2014-06-24 17:46:13
【问题描述】:

您好,我有两个数组,我想检查它们是否有任何元素彼此相等(相同),如果它们有,如果不只是打印编号,它们应该进入页面。

我已经编写了这段代码,但我不知道为什么它不起作用。

附:数组的元素包含文本。

$res = count($title1);

for ($j = 0; $j <= $res; $j++) {
   if(strtoupper($title2[$j]) == strtoupper($title1[$j]))
    {
        echo 'Yes<br/>';
        echo $title2[$j].'==='.$title1[$j].'<br/';
    }
   else{
        echo 'No<br/>';
    }
}

【问题讨论】:

  • “它不起作用”是什么意思?您希望您的代码做什么以及它实际上在做什么?
  • 您能否提供一些您需要的示例输入和预期输出?
  • 您的代码要求它们不仅具有相同的值,而且它们还必须具有该值的相同索引。因此,如果一个在索引 0 处具有“Joe”,而另一个在索引 1 处具有“Joe”,则它们将被视为不匹配。如果这是要求,那么您似乎是对的,但是如果您需要检查每个数组的每个值是否匹配,那么其他人的答案应该可以工作。

标签: php arrays loops if-statement


【解决方案1】:

你也可以用这个

<?php
$count = 0
foreach ($array1 as $value) {
    if(in_array($value , $array2)
    {
        echo 'Yes<br/>';
        echo $value;
        $count = $count + 1 ;
    }
}
if($count == 0 )
{
    echo "no" ;
}
?>

【讨论】:

  • $cout = $count + 1 ;(错字)应读作$count = $count + 1 ;
【解决方案2】:
foreach ($array1 as $value) {
    if(in_array($value , $array2)
    {
        echo 'Yes<br/>';
        echo $value;
        $count = $count + 1 ;
    }
}

这是正确答案 :) thnx @hamidreza

【讨论】:

    【解决方案3】:

    第一个问题是您使用的是 而不是 。如果您正在遍历数组计数并且您正在使用 它将越过数组边界。如果您的数组包含 4 个元素,则最后一个数组值位于索引 3:$arr[3](第四位),但您试图在最后一次迭代中获取 $arr[4] 上的值,这会导致错误。你应该检查你的error_log。

    试试这个:

    $res = count($title1);
    
    for ($j = 0; $j < $res; $j++) {
        //you need to check to see if $j'th position is available in $title2 array
        if(isset($title2[$j]) && strtoupper($title2[$j]) == strtoupper($title1[$j]))
        {
            echo 'Yes<br/>';
            echo $title2[$j].'==='.$title1[$j].'<br/';
        }
        else{
            echo 'No<br/>';
        }
    }
    

    或者你可以使用foreach循环:

    foreach($title1 as $key => $value) {
        if (isset($title2[$key]) && 
            strtoupper($title2[$key]) == strtoupper($title1[$key])) {
            echo 'Yes<br/>';
            echo $title2[$key].'==='.$title1[$key].'<br/';
        }
        else {
            echo 'No<br/>';
        }
    }
    

    【讨论】:

      【解决方案4】:

      我只能猜测,因为我们不知道数组包含什么,但我假设您想检查它们是否在任何索引处具有相同的元素。 目前,您只是检查$title1 是否与$title2 在同一索引处具有相同的元素。所以如果你有两个数组

      ['a', 'b'], ['b', 'a']
      

      它检查是否为'A' == 'B',然后检查是否为'B' == 'A'

      你需要做的是这样的:

      for ($j = 0; $j < count($title1); $j++) {
         for ($k = 0; $k < count($title2); $k++) {
           if(strtoupper($title2[$k]) == strtoupper($title1[$j]))
           {
              echo 'Yes<br/>';
              echo $title2[$j].'==='.$title1[$j].'<br/>';
           }
           else {
              echo 'No<br/>';
           }
         }
      }
      

      【讨论】:

      • 你为什么要遍历两个数组?这是O(n^2)。您可以遍历第一个数组并检查它是否设置在另一个数组中。此外,您的代码将在最后一次迭代中导致未定义的索引错误消息。看我的回答
      • 我正在遍历这两者,因为正如我的回答所说,它检查项目是否存在于另一个数组中的 任何位置
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2022-06-21
      • 2015-08-24
      • 2013-04-11
      相关资源
      最近更新 更多