【问题标题】:PHP Search Array column for match用于匹配的 PHP 搜索数组列
【发布时间】:2014-08-19 15:46:58
【问题描述】:

我有一个如下的数组,它有多个列。我想在第一列中搜索特定值,并返回匹配的行。有可能吗?

例如:

Array (
[0] => Array ( [id] => 1 [column2] => value2 [column3] => value3 [column4] => value4 [column5] => value5 ) 
[1] => Array ( [id] => 1 [column2] => value2 [column3] => value3 [column4] => value4 [column5] => value5 ) 
[2] => Array ( [id] => 2 [column2] => value2 [column3] => value3 [column4] => value4 [column5] => value5 
)

假设我想在“id”列中搜索“1”并显示结果。如何才能做到这一点?非常感谢!

【问题讨论】:

    标签: php arrays search


    【解决方案1】:

    由于您有一个嵌套的Array,您需要两次迭代:

    $filtered = array();
    $rows = Your Array;
    foreach($rows as $index => $columns) {
        foreach($columns as $key => $value) {
            if ($key == 'id' && $value == '1') {
                $filtered[] = $columns;
            }
        }
    }
    

    这应该可以完成工作。

    【讨论】:

    • 额外问题:我如何知道找到了多少结果(数组中返回了多少行)?那有可能吗?谢谢!
    • 要获取Array 中的项目数,请使用count() 函数。喜欢$num_results = count($filtered)
    【解决方案2】:

    使用这个功能:

    global $result;
    function array_searc_result($array,$key,$value)
    {
        global $result;
        foreach($array as $k=>$v)
        {
            if(array_key_exists($key,$v) && ($v[$key] == $value))
            {
                $result[] = $v;
            }
        }
        return $result;;
    }
    $data = array_searc_result($array,'id',2);
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    

    $array 是你给定的数组变量。

    【讨论】:

    • 不使用 Globals 就可以正常工作。另外,请注意函数名称中的准错字。
    【解决方案3】:

    如果您使用的是PHP &gt;= 5.5,那么您可以将新的array_column()array_keys()array_map() 结合使用。

    鉴于您的数组,$array:

    $keys = array_keys(array_column($array, 'id'), 1);
    $new_array = array_map(function($k) use ($array){return $array[$k];}, $keys);
    

    See demo

    【讨论】:

      【解决方案4】:

      我找到了一个更简单的解决方案,我认为值得与全世界分享

      in_array(1, array_column($yourArray, 'id'));

      在 PHP >= 5.5 上测试

      【讨论】:

      • 这会检查包含针的行是否存在,但不检查其位置。这没有提供问题中详细说明的输出。
      【解决方案5】:

      我使用这个助手通过键/值来查找匹配项:

      function array_search_by_key($array, $key, $value) {
          if(!is_array($array)) {
              return [];
          }
          $results = [];
          foreach($array as $element) {
              if(isset($element[$key]) && $element[$key] == $value) {
                  $results[] = $element;
              }
          }
          return $results;
      }
      

      【讨论】:

        【解决方案6】:

        这些步骤将始终返回使用唯一 id 列的数组中的一行(在此示例中为第一列,0)

        1) 获取一个仅包含 ID 的数组

        $ids = array_column($my_table, 0);

        2) 找到我的 ID 所在的行

        $row_index = array_search($id, $ids);(其中 $id 是某个 ID)

        3) 然后我可以使用

        $my_table[$row_index][n](其中 n 是给定的列)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 2012-10-04
          • 2023-03-21
          • 2011-03-13
          • 1970-01-01
          相关资源
          最近更新 更多