我有这个多维数组。我需要搜索它并只返回与“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' => '',
),
);
另一种可能的解决方案是基于array_search()
函数。您需要使用 PHP 5.5.0或更高版本。
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
$key = array_search(40489, array_column($userdb, 'uid'));
echo ("The key is: ".$key);
//This will output- The key is: 2
该函数array_search()
有两个参数。第一个是您要搜索的值。第二个是函数应该搜索的位置。该函数array_column()
获取 key 为的元素的值 'uid'
。
因此,您可以将其用作:
array_search('breville-one-touch-tea-maker-BTM800XL', array_column($products, 'slug'));
或者,如果您愿意:
// define function
function array_search_multidim($array, $column, $key){
return (array_search($key, array_column($array, $column)));
}
// use it
array_search_multidim($products, 'slug', 'breville-one-touch-tea-maker-BTM800XL');
原始示例(由 xfoxawy 提供)可以在DOCS上找到。页面。
_array_column()
更新
由于 Vael 的评论我很好奇,所以我做了一个简单的测试来测量使用的方法的性能array_search
和在接受的答案上提出的方法。
我创建了一个包含 1000 个数组的数组,结构是这样的(所有数据都是随机的):
[
{
"_id": "57fe684fb22a07039b3f196c",
"index": 0,
"guid": "98dd3515-3f1e-4b89-8bb9-103b0d67e613",
"isActive": true,
"balance": "$2,372.04",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "blue",
"name": "Green",
"company": "MIXERS"
},...
]
我运行了 100 次搜索测试,为 name 字段搜索不同的值,然后我计算了以毫秒为单位的平均时间。在这里你可以看到一个例子。
结果是,在这个答案上提出的方法需要大约 2E-7 才能找到值,而接受的答案方法需要大约 8E-7。
就像我之前所说的,对于使用这种大小的数组的应用程序来说,这两次都是可以接受的。如果尺寸增长很多,比如说1M个元素,那么这个小差异也会增加。
更新二
我已经为array_walk_recursive
这里的一些答案中提到的方法添加了一个测试。得到的结果是正确的。如果我们专注于性能,它比其他人在测试中检查的要差一些。在测试中,你可以看到它比基于array_search
. 同样,对于大多数应用程序来说,这并不是一个非常相关的区别。
更新三
感谢@mickmackusa 发现了这种方法的几个限制: