通过值从数组中获取键

时间:2017-06-22 21:01:59

标签: php

如何通过了解数据的价值来获取数组中的密钥?例如,这是一个数组:

$array = Array("Item1" => array("Number" => "One", "Letter" => "A"));

只要知道" One"或" A",如何获取主键名Item1

我已查看array_key_valuein_array,但我不认为这些功能对我的数组有用。

5 个答案:

答案 0 :(得分:1)

由于它是一个二维数组,因此您需要在内部数组中搜索该值,因此您必须创建自己的函数才能执行此操作。像这样:

function findInArray($array, $lookup){
    //loop over the outer array getting each key and value.
    foreach($array as $key=>$value){
        //if we found our lookup value in the inner array
        if(in_array($lookup, $value)){
            //return the original key
            return $key;
        }
    }
    //else, return null because not found
    return null;
}

$array = Array("Item1" => array("Number" => "One", "Letter" => "A"));

var_dump(findInArray($array, 'One')); //outputs string(5) "Item1"
var_dump(findInArray($array, 'Two')); //outputs null

演示:https://3v4l.org/oRjHK

答案 1 :(得分:0)

此功能可以帮助您

function key_of_value($array, $value){
    foreach($array as $key=>$val){
        if(in_array($value, $val)){
            return $key;
        }
    }
    return null;
}

echo key_of_value(['Item1'=>['One','Two','Three','Hello',2,6]],'A');

答案 2 :(得分:0)

无法绕过您的数据。这可能比两个foreach循环更优雅:

<?php
$match = null;
$needle = 'Two';
$haystack = [
    'Item1' => [
        'Number' => 'One',
        'Letter' => 'A'
    ],
    'Item2' => [
        'Number' => 'Two',
        'Letter' => 'B'
    ],
    'Item3' => [
        'Number' => 'Three',
        'Letter' => 'C'
    ],
];

array_walk($haystack, function($entry, $key) use ($needle, &$match) {
    if(in_array($needle, $entry)) {
        $match = $key;
    }
});
var_dump($match);

输出显然是:

string(5) "Item2"

答案 3 :(得分:0)

您可以使用array_walk_recursive递归迭代数组值。我编写了一个函数,它返回嵌套数组中搜索值的主键。

<?php

$array = array("Item1" => array("Number" => "One", "Letter" => "A", 'other' => array('Number' => "Two")));

echo find_main_key($array, 'One'); //Output: "Item1"
echo find_main_key($array, 'A'); //Output: "Item1"
echo find_main_key($array, 'Two'); //Output: "Item1"
var_dump(find_main_key($array, 'nothing')); // NULL

function find_main_key($array, $value) {
    $finded_key = NULL;
    foreach($array as $this_main_key => $array_item) {
        if(!$finded_key) {
            array_walk_recursive($array_item, function($inner_item, $inner_key) use ($value, $this_main_key, &$finded_key){
                if($inner_item === $value) {
                    $finded_key = $this_main_key;
                    return;
                }
            });
        }
    }
    return $finded_key;
}

答案 4 :(得分:0)

我就是这样做的:

foreach($array as $key => $value) { if(in_array('One', $value)) echo $key; }