Php 使用数组_搜索进行多值搜索

Php 使用数组_搜索进行多值搜索,php,Php,这很好,但是有没有办法使用多个值进行搜索:例如,get key wherename='flash'&&type='camer'?我想我只需要使用一个循环来创建自己的函数,该循环只需基于一个或两个参数检索所需的数组 $array_subjected_to_search =array( array( 'name' => 'flash', 'type' => 'hero' ), array( 'name'

这很好,但是有没有办法使用多个值进行搜索:例如,get key where
name='flash'&&type='camer'

我想我只需要使用一个循环来创建自己的函数,该循环只需基于一个或两个参数检索所需的数组

  $array_subjected_to_search =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );
  $key = array_search('flash', array_column($array_subjected_to_search, 'name'));
  var_dump($array_subjected_to_search[$key]);
给你:

function getValueMatch($array, $val1, $val2 = false, $type = 'name')
    {
        foreach($array as $key => $row) {
            # See note below, but it might be handy to have a reversible key name
            if($row[$type] == $val1) {
                if($val2) {
                    # You can put a changeable key name to reverse-find
                    # It might be helpful to search for the other key first
                    # at some point, best to keep your options open!
                    $altVar = ($type == 'name')? 'type' : 'name';
                    if($row[$altVar] == $val2)
                        return $row;
                }
                else
                    return $row;
            }
        }
    }

$array =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );

print_r(getValueMatch($array,'flash','camera'));
print_r(getValueMatch($array,'antihero',false,'type'));
反向匹配的示例(
类型
而不是
名称
):

给你:

function getValueMatch($array, $val1, $val2 = false, $type = 'name')
    {
        foreach($array as $key => $row) {
            # See note below, but it might be handy to have a reversible key name
            if($row[$type] == $val1) {
                if($val2) {
                    # You can put a changeable key name to reverse-find
                    # It might be helpful to search for the other key first
                    # at some point, best to keep your options open!
                    $altVar = ($type == 'name')? 'type' : 'name';
                    if($row[$altVar] == $val2)
                        return $row;
                }
                else
                    return $row;
            }
        }
    }

$array =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );

print_r(getValueMatch($array,'flash','camera'));
print_r(getValueMatch($array,'antihero',false,'type'));

我想我只需要使用一个循环来创建我自己的函数,该循环将根据一个或两个参数检索我想要的数组

  $array_subjected_to_search =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );
  $key = array_search('flash', array_column($array_subjected_to_search, 'name'));
  var_dump($array_subjected_to_search[$key]);
给你:

function getValueMatch($array, $val1, $val2 = false, $type = 'name')
    {
        foreach($array as $key => $row) {
            # See note below, but it might be handy to have a reversible key name
            if($row[$type] == $val1) {
                if($val2) {
                    # You can put a changeable key name to reverse-find
                    # It might be helpful to search for the other key first
                    # at some point, best to keep your options open!
                    $altVar = ($type == 'name')? 'type' : 'name';
                    if($row[$altVar] == $val2)
                        return $row;
                }
                else
                    return $row;
            }
        }
    }

$array =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );

print_r(getValueMatch($array,'flash','camera'));
print_r(getValueMatch($array,'antihero',false,'type'));
反向匹配的示例(
类型
而不是
名称
):

给你:

function getValueMatch($array, $val1, $val2 = false, $type = 'name')
    {
        foreach($array as $key => $row) {
            # See note below, but it might be handy to have a reversible key name
            if($row[$type] == $val1) {
                if($val2) {
                    # You can put a changeable key name to reverse-find
                    # It might be helpful to search for the other key first
                    # at some point, best to keep your options open!
                    $altVar = ($type == 'name')? 'type' : 'name';
                    if($row[$altVar] == $val2)
                        return $row;
                }
                else
                    return $row;
            }
        }
    }

$array =array(
  array(
          'name' => 'flash',
          'type' => 'hero'
      ),

  array(
          'name' => 'zoom',
          'type' => 'villian'
      ),

  array(
          'name' => 'snart',
          'type' => 'antihero'
      ),
  array(
        'name' => 'flash',
        'type' => 'camera'
      )
  );

print_r(getValueMatch($array,'flash','camera'));
print_r(getValueMatch($array,'antihero',false,'type'));
是否有一种方法可以使用多个值进行搜索:例如,在何处获取密钥 name='flash'和&type='camera'

只需使用
数组_键
功能:

Array
(
    [name] => snart
    [type] => antihero
)
输出:

$result_key = array_keys($array_subjected_to_search, [ 'type' => 'camera','name' => 'flash']);
print_r($result_key);
是否有一种方法可以使用多个值进行搜索:例如,在何处获取密钥 name='flash'和&type='camera'

只需使用
数组_键
功能:

Array
(
    [name] => snart
    [type] => antihero
)
输出:

$result_key = array_keys($array_subjected_to_search, [ 'type' => 'camera','name' => 'flash']);
print_r($result_key);
该函数接受数组作为参数,以下参数适用于您提供的用例

Array
(
    [0] => 3
)
注意:您当前的搜索将无法正常运行,它将始终返回零索引,因为array_搜索返回0或false

$array_subjected_to_search =array(
  array(
    'name' => 'flash',
    'type' => 'hero'
  ),
  array(
    'name' => 'zoom',
    'type' => 'villian'
  ),
  array(
    'name' => 'snart',
    'type' => 'antihero'
  ),
  array(
    'name' => 'flash',
    'type' => 'camera'
  )
);
$compare = array(
    'name'=>'flash',
    'type'=>'camera'
);
$key = array_search($compare, $haystack);
var_dump($haystack[$key]);
该函数接受数组作为参数,以下参数适用于您提供的用例

Array
(
    [0] => 3
)
注意:您当前的搜索将无法正常运行,它将始终返回零索引,因为array_搜索返回0或false

$array_subjected_to_search =array(
  array(
    'name' => 'flash',
    'type' => 'hero'
  ),
  array(
    'name' => 'zoom',
    'type' => 'villian'
  ),
  array(
    'name' => 'snart',
    'type' => 'antihero'
  ),
  array(
    'name' => 'flash',
    'type' => 'camera'
  )
);
$compare = array(
    'name'=>'flash',
    'type'=>'camera'
);
$key = array_search($compare, $haystack);
var_dump($haystack[$key]);

这仅在拥有数组的所有值时有效。如果此数组包含的内容多于搜索值,您将无法找到它。@Dwza因为用户特别要求搜索
&&
用例,所以此方法完全按照预期工作。如果
$compare
数组的值比haystack中的值多,那么它当然找不到它,因为它当然不符合
&&
的要求,但我的意思是,当haystack数组包含更多字段时,这也不起作用。假设$array\u subject\u to\u search-elements还包含一个或多个id字段,比较也找不到该数组。请参见此示例,这仅在具有数组的所有值时有效。如果此数组包含的内容多于搜索值,您将无法找到它。@Dwza因为用户特别要求搜索
&&
用例,所以此方法完全按照预期工作。如果
$compare
数组的值比haystack中的值多,那么它当然找不到它,因为它当然不符合
&&
的要求,但我的意思是,当haystack数组包含更多字段时,这也不起作用。假设$array\u subject\u to\u search-elements还包含一个或多个id字段,比较也找不到该数组。看这个例子