为了账号安全,请及时绑定邮箱和手机立即绑定

PHP多维数组搜索(按特定值查找键)

PHP多维数组搜索(按特定值查找键)

PHP
不负相思意 2019-08-12 16:37:23
PHP多维数组搜索(按特定值查找键)我有这个多维数组。我需要搜索它并只返回匹配“slug”值的键。我知道还有其他关于搜索多维数组的线程,但我并不是真正了解它以适用于我的情况。非常感谢您的帮助!所以我需要一个像以下的功能:myfunction($products,'breville-one-touch-tea-maker-BTM800XL');// returns 1这是阵列:$products = array (1  => array(         'name'          => 'The Breville One-Touch Tea Maker',         'slug'          => 'breville-one-touch-tea-maker-BTM800XL',         'shortname'     => 'The One-Touch Tea Maker',         'listprice'     => '299.99',         'price'         => '249.99',         'rating'        => '9.5',         'reviews'       => '81',         'buyurl'        => 'http://www.amazon.com/The-Breville-One-Touch-Tea-Maker/dp/B003LNOPSG',         'videoref1'     => 'xNb-FOTJY1c',         'videoref2'     => 'WAyk-O2B6F8',         'image'         => '812BpgHhjBML.jpg',         'related1'      => '2',         'related2'      => '3',         'related3'      => '4',         'bestbuy'       => '1',         'quote'         => '',         'quoteautor'    => 'K. Martino',         ),2  => array(         'name'          => 'Breville Variable-Temperature Kettle BKE820XL',         'slug'          => 'breville-variable-temperature-kettle-BKE820XL',         'shortname'     => 'Variable Temperature Kettle',         'listprice'     => '199.99',         'price'         => '129.99',         'rating'        => '9',         'reviews'       => '78',         'buyurl'        => 'http://www.amazon.com/Breville-BKE820XL-Variable-Temperature-1-8-Liter-Kettle/dp/B001DYERBK',         'videoref1'     => 'oyZWBD83xeE',         'image'         => '41y2B8jSKmwL.jpg',         'related1'      => '3',         'related2'      => '4',         'related3'      => '5',         'bestbuy'       => '1',         'quote'         => '',         'quoteautor'    => '',         ),);
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

此类方法可以通过多个条件在数组中搜索:

class Stdlib_Array{
    public static function multiSearch(array $array, array $pairs)
    {
        $found = array();
        foreach ($array as $aKey => $aVal) {
            $coincidences = 0;
            foreach ($pairs as $pKey => $pVal) {
                if (array_key_exists($pKey, $aVal) && $aVal[$pKey] == $pVal) {
                    $coincidences++;
                }
            }
            if ($coincidences == count($pairs)) {
                $found[$aKey] = $aVal;
            }
        }

        return $found;
    }    }// Example:$data = array(
    array('foo' => 'test4', 'bar' => 'baz'),
    array('foo' => 'test',  'bar' => 'baz'),
    array('foo' => 'test1', 'bar' => 'baz3'),
    array('foo' => 'test',  'bar' => 'baz'),
    array('foo' => 'test',  'bar' => 'baz4'),
    array('foo' => 'test4', 'bar' => 'baz1'),
    array('foo' => 'test',  'bar' => 'baz1'),
    array('foo' => 'test3', 'bar' => 'baz2'),
    array('foo' => 'test',  'bar' => 'baz'),
    array('foo' => 'test',  'bar' => 'baz'),
    array('foo' => 'test4', 'bar' => 'baz1'));$result = Stdlib_Array::multiSearch($data, array('foo' => 'test4', 'bar' => 'baz1'));var_dump($result);

会产生:

array(2) {
  [5]=>
  array(2) {
    ["foo"]=>
    string(5) "test4"
    ["bar"]=>
    string(4) "baz1"
  }
  [10]=>
  array(2) {
    ["foo"]=>
    string(5) "test4"
    ["bar"]=>
    string(4) "baz1"
  }}


查看完整回答
反对 回复 2019-08-12
?
手掌心

TA贡献1942条经验 获得超3个赞

非常简单:

function myfunction($products, $field, $value){
   foreach($products as $key => $product)
   {
      if ( $product[$field] === $value )
         return $key;
   }
   return false;}


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 3207 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信