【问题标题】:How to check if value is equal to string in array如何检查值是否等于数组中的字符串
【发布时间】:2022-01-04 07:09:52
【问题描述】:

我想检查值:diam-mm是否存在于数组中,如果值不存在则做一些事情。

一个数组可以有多个属性,属性名称为:[PropertyType]->[Name]

我以为我循环到属性并检查是否存在 diam-mm 值,否则做一些事情,但由于循环,他确实多次导入值而不是一次。

一个具有属性的数组示例:

[2] => Array
        (
            [PropertyType] => Array
                (
                    [Guid] =>
                    [DataType] => Text
                    [Name] => diam-mm
                    [Unit] => 
                )

            [BooleanValue] => 
            [DateTimeValue] => 
            [NumericValue] => 
            [TextValue] => 400
            [XmlValue] => 
            [UrlValue] => 400
        )

    [3] => Array
        (
            [PropertyType] => Array
                (
                    [Guid] => 
                    [DataType] => Text
                    [Name] => lengte-mm
                    [Unit] => 
                )

            [BooleanValue] => 
            [DateTimeValue] => 
            [NumericValue] => 
            [TextValue] => 2000
            [XmlValue] => 
            [UrlValue] => 2000
        )

【问题讨论】:

  • 如果数组嵌套的深度超过 1 个,并且您不知道它可能有多少层,则需要使用递归。
  • 你能告诉我如何解决这个问题吗?

标签: php arrays


【解决方案1】:
<?php 
   for ($i=0; $i <count($array) ; $i++) { 
     if($array[$i]['PropertyType']['Name']=="diam-mm"){
        // your code
     }
   }
?>

【讨论】:

    【解决方案2】:

    如果你想检查一个数组键是否匹配一个值,你可以使用简单的变量赋值来做到这一点。但是,您需要遍历每个数组索引项并根据它的迭代枚举循环。

    要创建循环,我建议使用count 来计算数组中的项目数量。我们将结果分配给一个变量:

    $count = count($my_array);
    

    请记住,count 仅根据实际计数而不是数组索引来计算项目数。这意味着索引从零开始且索引为 0-30 的数组将返回 31 作为 count 的结果,因为 count 将零索引计为实际计数值。

    要解决这个问题,我们需要从 count 的结果中减去 1:

    $count = $count - 1;
    

    然后我们可以使用计数作为for 循环中的重复次数。其中变量$i 表示循环正在经历的迭代:

    //Loop through each array index
    for($i=0; $i <= $count; $i++){
        //Assign the value of the array key to a variable
        $value = $my_array[$i]['PropertyType']['Name'];
        //Check if result string contains diam-mm
        if(str_contains($value, 'diam-mm'){
            echo 'The value matches!';
        } else{
            echo 'The value does not match!';
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个功能,我希望它能回答你的问题...

      function array_recursive_search_key_map($needle, $haystack) {
          foreach($haystack as $first_level_key=>$value) {
              if ($needle === $value) {
                  return array($first_level_key);
              } elseif (is_array($value)) {
                  $callback = $this->array_recursive_search_key_map($needle, $value);
                  if ($callback) {
                      return array_merge(array($first_level_key), $callback);
                  }
              }
          }
          return false;
      }
      

      如何使用

      $yourValue = "diam-mm";
      $array_keymap = array_recursive_search_key_map($yourValue, $yourArray);
      var_dump($array_keymap);
      

      输出

          Array
      (
          [0] => 0
          [1] => PropertyType
          [2] => Name
      )
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2016-12-21
      • 2018-02-10
      相关资源
      最近更新 更多