让我们说我有一个像下面的数组
The min is -290390323 at index (21850, -9176672)
The max is 32595 at index (0, 0)
现在,我需要搜索键值“三”,并且我想返回的输出为1(数组索引)。如果不存在任何值,我想返回-1。
实际上是
$array = array(
array( //index 0
'col_1' => 'one',
'col_2' => 'two'
),
array( //index 1
'col_5' => 'five',
'col_3' => 'three'
)
);
我找到了一个解决方案here,但是在我的情况下,列名称随时都将不同。
例如,
$array[1]['col_5']
在上面的代码中,我们需要指定列名,但是在我的数组中,列名是不同的。
答案 0 :(得分:2)
function search($array){
for($i=0;$i<count($array);$i++){
foreach($array[$i] as $key => $value){
if($value=='three'){
return $i;;
}
}
}
return -1;
}
答案 1 :(得分:1)
不确定要查找的是什么,但这是一些方法:
$keys = array_map(
function ($el) {
return array_search('three', $el) === false ? -1 : 1;
}, $array);
或者您可能想要类似的东西:
$keys = array_map(
function ($el) {
$idx = array_search('three', $el);
return $idx === false ? -1 : $idx;
}, $array);
我希望最终我能达到您的目标:
$keys = array_map(
function ($el) {
$idx = array_search('three', $el);
if ($idx === false) {
return -1;
} else {
return array_search($idx, array_keys($el));
}
}, $array);
即使我了解您的目标,我也不认为您真的需要获取索引1
而不是原始密钥col_3
-在大多数情况下,col_3
可能是您想要的用于以下计算,以及将false
转换为-1
的方式。所以我猜您需要的功能应该只是:
$keys = array_map(
function ($el) {
return array_search('three', $el);
}, $array);
当找到元素时,它将为关联数组返回真实的键,否则返回 false 。
也许我还是没有实现你的目标?
更新:如果您只需要一个值,请直接这样做:
$key = -1;
foreach($array as $k => $el) {
if (array_search('three', $el) !== false) {
$key = $k;
break;
}
}
echo $key;
答案 2 :(得分:1)
您可以使用array_filter
函数的自定义实现来执行此操作。但是,仅使用一个`foreach``循环同样有效。
$array = [
[
'1' => 'one',
'2' => 'two'
],
[
'1' => 'five',
'2' => 'three',
],
];
// Set our search parameter
$needle = 'three';
$searchResult = current(array_filter(array_keys($array), function ($a) use ($array, $needle) {
return array_search($needle, $array[$a]);
})) ?: -1;
// Output
var_dump($searchResult);