这是最简单的方法(不检查)
$a = array (
0 =>
array (
"url" => 'fareham',
"value" => 'Fareham'
),
1 =>
array (
"url" => 'southampton',
"value" => 'Southampton'
)
);
$u = 'fareham';
$i = $a[false===($f=array_search($u,array_column($a,'url')))?-1:$f]['value'];
print_r($i);
输出
Fareham
Sandbox
工作原理
首先我们创建一个数组,我们可以使用 array_column 在我们想要搜索的列上搜索 url。看起来像这样[0=>'fareham', 1=>'southampton']
然后我们使用返回索引的普通 array_search,如果您注意到上面的索引与原始数组相关。这意味着我们可以将它作为顶级键放入,然后添加我们想要的键是一件简单的事情。
因为 array_search 可以返回一个布尔值(false),PHP 将其视为 0 或第一个索引,我为此做了一些修改。但更好的方法是像这样检查它:
$a = 数组 (
0 =>
大批 (
"url" => 'fareham',
"价值" => '法勒姆',
“额外” => 'Foo'
),
1 =>
大批 (
"url" => '南安普顿',
"价值" => '南安普顿',
“额外” => '酒吧'
)
);
function serchMultiDimensionalValue($needle, $haystack, $fields='value'){
if(false === ($f=array_search($needle,array_column($haystack,'url')))) return false; //or return [];
if(!is_array($fields)) $fields = [$fields];
return array_intersect_key($haystack[$f], array_flip($fields));
}
var_dump(serchMultiDimensionalValue('foo',$a));
var_dump(serchMultiDimensionalValue('fareham',$a));
var_dump(serchMultiDimensionalValue('fareham',$a, 'extra'));
var_dump(serchMultiDimensionalValue('fareham',$a, ['extra','url']));
输出
bool(false)
array(1) {
["value"]=>
string(7) "Fareham"
}
array(1) {
["extra"]=>
string(3) "Foo"
}
array(2) {
["url"]=>
string(7) "fareham"
["extra"]=>
string(3) "Foo"
}
Sandbox
我给它增加了一点“功能”,希望你不要介意。