应返回密钥的数组

时间:2016-04-11 15:23:18

标签: 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')
);

现在我想搜索一下“滚刀”。并让它回归'烹饪'
我该怎么做?

2 个答案:

答案 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);