我有这个:
$results = array(
'Always On' => array('alwaysOn', 'microwave'),
'Laundry' => array('dishWasher', 'washingMachine', 'dryer'),
'Cooking' => array('oven', 'hob', 'grill', 'kettle'),
'Refrigeration' => array('refrigeration'),
'Space Heating' => array('spaceHeating', 'gasBoiler'),
'Water Heating' => array('waterHeating')
);
现在我想搜索一下“滚刀”。并让它回归'烹饪'
我该怎么做?
答案 0 :(得分:2)
你正在寻找in_array函数,这个:
in_array([1, 2, 3, 4], 2);
将返回true
,因为2
存在于数组[1, 2, 3, 4]
中。我们可以在这里使用in_array
来检查其中一个子数组是否包含您要查找的值。
为此,我们必须迭代初始数组中的每个数组。
foreach($results as $result) {
...
}
然后针对in_array
检查$result
,检查$result
是否包含hob
的值。
但是,一旦我们找到hob
的值,您希望key
返回,可以通过在key
定义中识别foreach
来完成此操作。
foreach($results as $key=>$result) {
echo $key;
} // will output Always on, Laundry, Cooking, ...
因此,当我们遍历数组时,一旦我们找到了我们正在寻找的数组中的值,我们就能够返回$key
值。
作为一项功能
function getKeyOfArrayContainingHob($results) {
foreach($results as $key=>$result)
{
if(in_array("hob", $result))
{
return $key;
}
}
}
或者,作为动态函数
function getKeyOfArrayContainingValue($needle, $haystack) {
foreach($haystack as $key=>$hay)
{
if(in_array($needle, $hay))
{
return $key;
}
}
}
http://php.net/manual/en/function.in-array.php
in_array
方法在这里很有用,我们可以迭代每个键/值对,然后检查hob的值是否存在于任何这些子数组中,在这种情况下返回{{1}我们在foreach($key
)中定义的子数组。
答案 1 :(得分:0)
你需要循环kay =>然后,值循环遍历该值以搜索您期望返回的值,类似于:
<?php
$results = array(
'Always On' => array('alwaysOn', 'microwave'),
'Laundry' => array('dishWasher', 'washingMachine', 'dryer'),
'Cooking' => array('oven', 'hob', 'grill', 'kettle'),
'Refrigeration' => array('refrigeration'),
'Space Heating' => array('spaceHeating', 'gasBoiler'),
'Water Heating' => array('waterHeating')
);
function getRowValuesByValue(array $results, $expected)
{
foreach ($results as $key => $values) {
if (in_array($expected, $values)) {
return $key;
}
}
throw new \Exception('Value not found');
}
$category = getRowValuesByValue($results, 'hob');
// Cooking
print_r($row);