【问题标题】:Searching an array return dimension where criteria is搜索条件为的数组返回维度
【发布时间】:2011-02-28 13:17:46
【问题描述】:

想要搜索包含大量信息的数组,我尝试实现 PHP.net 手册中的一些想法,但是,我失败了。

我的目标是在数组中搜索给定值,如果找到该值,我需要获取与其相关的所有信息。请参阅数组示例和 php 代码。

所以对于 RoomCode 117 = PropertyId 在数组中 我想为那个财产抢走一切

PHP:

    $RoomCode = 117
    echo in_array($RoomCode, $_SESSION['PROPERTY_ARR']);

数组:

Array
(
    [Property One] => Array
        (
            [Property] => Bolt Hole
            [PropertyId] => 117
            [LocationId] => 9

    )
    [Property Two] => Array
        (
            [Property] => Ledge
            [PropertyId] => 1197
            [LocationId] => 10
    )

)

我的数组包含每个“属性”的更多信息。更多信息,尽管问。

谢谢C

【问题讨论】:

    标签: php arrays search


    【解决方案1】:
    $RoomCode = 117;                                                                                                                                                           
    $foundProperties = array_filter($_SESSION['PROPERTY_ARR'], create_function('$r', 'return $r["PropertyId"] == '.$RoomCode.';'));                                                                
    

    【讨论】:

    • @Russell - 谢谢。我已经删除了不必要的)。
    【解决方案2】:

    如果您已经测试了 cmets 中的解决方案以在 PHP 文档中搜索 array_search (http://php.net/manual/en/function.array-search.php) 和 in_array (http:// php.net/manual/en/function.in-array.php),也许你应该为你的数组考虑一个更好的格式。 如果我错了,请告诉我,但看起来 PropertyId 是每个属性的唯一标识符。如果该数组由属性 id 索引,则搜索数组 id 会更容易和更快。 如果我修改你的示例数组,你会得到这样的:

    Array
    (
        [117] => Array
            (
                [Property] => Bolt Hole
                [LocationId] => 9
    
        )
        [1197] => Array
            (
                [Property] => Ledge
                [LocationId] => 10
        )
    )
    

    然后,你不需要搜索它,如果你想要属性 117,你只需使用:

    $_SESSION['PROPERTY_ARR'][117]
    

    【讨论】:

      【解决方案3】:

      我尝试了我最好和最简单的解决方案,请看看

      $arr_prop =array
      (
          'Property One' => array
          (
                  'Property' => 'Bolt Hole',
                  'PropertyId' => 117,
                  'LocationId' => 9
      
          ),
          'Property Two' => array
              (
                  'Property' => 'Ledge',
                  'PropertyId' => 1197,
                  'LocationId' => 10
          )
      );
      //echo "<pre>";
      //print_r($arr_prop);
      $r =117;
      $output=array();
      foreach($arr_prop as $key=>$value) 
      {
          //echo "<pre>";
          //var_dump($value);
          if(is_array($value)) 
          {
              //echo __LINE__;
              if(in_array($r,$value))
                  $output = $value;
          }
      }
      echo "<pre>";
      print_r($output);
      

      【讨论】:

        猜你喜欢
        • 2017-11-16
        • 1970-01-01
        • 2014-11-11
        • 2011-05-05
        • 1970-01-01
        • 2014-08-03
        • 1970-01-01
        • 2015-04-20
        • 2013-08-29
        相关资源
        最近更新 更多