繁体   English   中英

通过php中的值查找多维关联数组的键

[英]Find key of a multi-dimensional associative array by value in php

我正在尝试使用数组函数(不循环整个数组集)来查找多维数组的键。

我的数组如下

$main_array = [];

$main_array[0]['id']=1001;
$main_array[0]['name']=test1;
$main_array[1]['id']=1002;
$main_array[1]['name']=test2;
$main_array[2]['id']=1001;
$main_array[2]['name']=test3;

我想通过使用该值来获取数组的索引,而无需循环所有数组(因为我的数组有点大)。

如果我传递值“ 1001”,则我希望两个索引分别为0和2。尝试使用array_search()函数,在我的情况下不起作用。

请帮我解决这个问题。

我认为您无法完全避免搜索数组。

您的结构规划不好。 您应该使用id(应该是唯一的)作为数组的键,如下所示:

$main_array[1001]['name'] = 'foo'

这将更容易处理和维护。

我建议您在结构变大之前做出努力并更改结构。

您应该考虑更改array结构。 由于您的ID不是唯一的,因此具有相同ID的元素将保留在一个array

$main_array = array(
    1001 => array(
        array('name' => 'test1'),
        array('name' => 'test3'),
    ),
    1002 => array(
        array('name' => 'test2'),
    )
);

所以

print_r( $main_array[1001] );

会给你

Array
(
    [0] => Array
        (
            [name] => test1
        )

    [1] => Array
        (
            [name] => test3
        )

)

如果不可能,则必须遍历整个阵列以实现此目的。

function arraySearchId( $id, $array ) {
    $results = array();
    foreach ( $array as $key => $val ) {
        if ( $val['id'] === $id ) {
            $results[] = $key;
        }
    }
    return $results;
}

echo '<pre>';
print_r( arraySearchId( 1001, $main_array ) );
echo '</pre>';

结果:

Array
(
    [0] => 0
    [1] => 2
)

作为你的代码

$main_array = [];
$main_array[0]['id']=1001;
$main_array[0]['name']=test1;
$main_array[1]['id']=1002;
$main_array[1]['name']=test2;
$main_array[2]['id']=1001;
$main_array[2]['name']=test3;

您需要“无循环”,答案是:必须循环至少一次,以预处理数据并创建索引数组。

$indexed = array();
foreach($main_array as $i=>$item) {
    if( !isset($indexed[$item['id']]) ) $indexed[$item['id']] = array();
    $indexed[$item['id']][] = $i;
}

当您需要找到1001时

$result = $indexed['1001'] // array(0,2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM