【问题标题】:How to select several array elements and check if they are equal to variable如何选择几个数组元素并检查它们是否等于变量
【发布时间】:2021-05-13 21:59:27
【问题描述】:

我正在尝试通过观看视频和阅读博客自学 PHP。我不会成为职业选手,我只是个业余爱好者。所以我正在尝试编写一些代码,但我走到了死胡同。 所以我有一个字符串,假设该字符串有一些数字 f.e. 100、2000、3000。使用explode 方法我将字符串转换为数组。现在我有一个变量 f.e. $var= 50;

我想看看$var是等于数组的第一个还是第三个元素;

<?php
    $str = " 100, 2000, 3000";
    $fevArr = explode(",", $str);
    $var = 50;
    if ($var == $fevArr['0'] or $var == $fevArr['2'] ) {
        echo "It is";
    } else {
        echo "It is not";
    }
?>

但是我可能在字符串中有很多数字,我可能想检查 $var 是否等于其中的许多数字(比如第 1、10、20、101、300 等)。所以我想知道是否有办法制作这样的东西:

if ($var == $fevArr['0', '9', '19',]) { ....

换句话说,如果有办法一次选择多个数组元素。

【问题讨论】:

  • 不,这样的语法不存在。但是您可以将要检查的索引放入另一个数组,然后循环,以分别访问第一个数组中的每个索引。但实际上,您可能更愿意使用 php.net/manual/en/function.array-search.php 之类的东西
  • $fevArray 元素可能包含空格

标签: php arrays


【解决方案1】:

是的,您可以使用array_keys 函数。它将返回与您要查找的值匹配的所有索引。然后您可以使用array_intersect 函数来检查这些索引是否与您要查找的索引匹配。

$var = 50;
$indices = [0, 2];
$keys = array_keys($fevArr, $var);
$matches = array_intersect($indices, $keys);

if(count($matches) > 0) {
   ...
}

【讨论】:

    【解决方案2】:

    您可以在if 语句中使用in_array($var, $fevArray) (see documentation)。

    【讨论】:

    • 不确定您是否正确理解了这个问题。 OP 只想检查数组中的特定位置,而不是整个数组。
    【解决方案3】:

    您可以使用array_search (link) 来返回第一个匹配项的键,如果没有找到匹配项则使用false,或者您可以使用in_array (link) 方法来检查是否存在.

    【讨论】:

      【解决方案4】:

      in_array()this 不一致

      你可以使用下面的代码,我知道了here

      function contains($str, array $arr)
      {
          foreach($arr as $a) {
              if (stripos($str,$a) !== false) return true;
          }
          return false;
      }
      

      您可以将其应用为:

      if (contains($var, $fevArr) {
       echo "It is";
      }
      else {
       echo "It is not";
      }
      

      【讨论】:

      • 不确定您是否正确理解了这个问题。 OP 只想检查数组中的特定位置,而不是整个数组。
      • 这不是我想要的,但它帮助我找到了解决办法。所以谢谢你!
      【解决方案5】:
      <?php
          function contains_at_keys($haystack, $needle, $keys){
              //get all keys matching needle
              $matching_keys = array_keys($haystack, $needle);
              
              //return if these keys contain one or more of the keys to search
              return(sizeof(array_intersect($matching_keys, $keys)) > 0);
          }
          
          
          $str = "100, 2000, 3000, 50, 300, 50, 200";
          $fevArr = explode(",", $str);
          $var = 50;
          
          $keys = [3, 5];
          
          
          if(contains_at_keys($fevArr, $var, $keys)){
              echo("It is");
          } else {
              echo("It is not");
          }
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2019-11-17
        • 2020-01-16
        • 2014-12-10
        • 2017-05-29
        • 2017-03-15
        相关资源
        最近更新 更多