Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-查找键具有给定值的数组_Php_Arrays_Dictionary_Indexing - Fatal编程技术网

php-查找键具有给定值的数组

php-查找键具有给定值的数组,php,arrays,dictionary,indexing,Php,Arrays,Dictionary,Indexing,我有一系列的词汇,如: $arr=array( 排列( 'id'=>'1', 'name'=>'machin', ), 排列( 'id'=>'2', 'name'=>'chouette', ), ); 如何找到包含id2(chouette)的数组的名称 我是不是必须对数组重新编制索引 谢谢大家,我被迫在数组中循环(这是我想要避免的),我认为这是一些查找功能,比如Python。因此,我想我将使用id重新编制索引,这有点粗糙,但这将为您提供名称 $name = false; foreach($a

我有一系列的词汇,如:

$arr=array(
排列(
'id'=>'1',
'name'=>'machin',
),
排列(
'id'=>'2',
'name'=>'chouette',
),
);
如何找到包含
id
2(chouette)的数组的
名称

我是不是必须对数组重新编制索引



谢谢大家,我被迫在数组中循环(这是我想要避免的),我认为这是一些查找功能,比如Python。因此,我想我将使用
id

重新编制索引,这有点粗糙,但这将为您提供名称

$name = false;
foreach($arr as $v) {
    if($v['id'] == '2') {
         $name = $v['name'];
         break;
    }   
}
echo $name;

因此,不必强制您对数组重新编制索引,但这会使事情变得更简单。

只需找到包含要查找的id的数组索引即可。
$name;
foreach ($arr as $value){
    if ( $value['id'] == 2  ){
        $name = $value['name'];
        break;
    }
}
因此,关于这个话题,我们已经有了很多资料


假设您的实际应用程序中有一个包含大量数据的大数组,那么它可能太慢(不合您的口味)。在这种情况下,您确实需要修改数组的结构,以便可以更快地查找,例如,使用id作为名称的索引(如果您只对名称感兴趣)。

我认为重新索引信息可能非常有用。如果ID是唯一的,请尝试以下操作:

$newarr = array();
for($i = 0;$i < count($arr);$i++){ $newarr[$arr[$i]['id']] = $arr[$i]['name']; }
foreach($newarr as $key => $value){
    if($value == "machin"){
        return $key;
    }
}
然后您可以使用“foreach”遍历数组,如下所示:

$newarr = array();
for($i = 0;$i < count($arr);$i++){ $newarr[$arr[$i]['id']] = $arr[$i]['name']; }
foreach($newarr as $key => $value){
    if($value == "machin"){
        return $key;
    }
}
但当然,这同样适用于旧阵列:

foreach($arr as $item){
    if($item['name'] == "machin"){
        return $item['id'];
    }
}
这取决于您计划对阵列执行的操作;-)

array\u key\u exist()
是检查密钥的函数
foreach
将帮助您进入多维数组。此函数将帮助您获取数组的
名称
元素,并允许您指定不同的
id

function findKey($bigArray, $idxVal) {
    foreach($bigArray as $array) {
        if(array_key_exists('id', $array) && $array['id'] == $idxVal) {
            return $array['name'];
        }
    }
    return false;
}

//Supply your array for $arr
print(findKey($arr, '2')); //"chouette"

由于for循环是实现这一点的最佳方法,我建议您更改数组,使id成为数组索引。例如:

$arr = array(
    1 => 'machin',
    2 => 'chouette',
);

通过这种方式,您可以直接获得调用$arr[2]的名称。无循环并保持程序在线性时间内运行。

OP感兴趣的是为给定的
id
查找
名称。。。因此,在数组上使用reindex方法后,您可以使用
$newarr['1']
来获得
machin
。是的,这是我想要避免的,但我似乎不得不这样做