我试图使用数组函数找到多维数组的关键字(不循环整个数组)。
我的数组如下,
$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()
函数,但不适用于我的情况。
请帮我解决这个问题。
答案 0 :(得分:1)
我认为你不能完全避免搜索阵列。
你的结构计划不好。您应该使用id(应该是唯一的)作为数组的键,如下所示:
$main_array[1001]['name'] = 'foo'
这将更容易处理和维护。
我建议你在结构变得非常大之前付出努力并改变它。
答案 1 :(得分:1)
您应该考虑更改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
)
答案 2 :(得分:0)
作为您的代码
$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;
你需要&#34;没有循环&#34;,答案是:你必须至少循环一次,以预处理数据,制作一个索引数组。
$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)