您好我有一个多维关联数组:
$array= array(
'Book1' => array('http://www.google.com', '45' ),
'Book2' => array('http://www.yahoo.com', '46', )
)
我需要能够在'BookX'上搜索$ array,然后返回'BookX'的内容。
我试过了:
function array_searcher($needles, $array)
{
foreach ($needles as $needle) {
foreach ($array as $key )
{
if ($key == $needle)
{
echo $key;
}
}
}
}
搜索
$needles = array('Book1' , 'Book2' );
但这不会返回任何东西
答案 0 :(得分:7)
我可能会误解,但这听起来像是访问者。如果没有,你能澄清一下吗?
$array= array(
'Book1' => array('http://www.google.com', '45' ),
'Book2' => array('http://www.yahoo.com', '46', )
);
echo $array['Book1'];
编辑:我确实误解了你的目标。我对做两个foreach循环做了评论。虽然这确实有效,但当你有一个非常大的干草堆阵列时,性能会受到影响。我建议使用isset()
来检测大海捞针阵列中是否存在针。
我修改了函数以返回找到的结果数组,以删除从输出到stdout的所有性能命中。我运行了以下性能测试,虽然它可能不会一遍又一遍地进行相同的搜索,但它指出了当你的数组很大时做两个foreach循环的效率低下:
function array_searcher($needles, $array) {
$result = array();
foreach ($needles as $needle) {
foreach ($array as $key => $value) {
if ($key == $needle) {
$result[$key] = $value;
}
}
}
return $result;
}
function array_searcher2($needles, $array) {
$result = array();
foreach ($needles as $needle) {
if (isset($array[$needle])) {
$result[$needle] = $array[$needle];
}
}
return $result;
}
// generate large haystack array
$array = array();
for($i = 1; $i < 10000; $i++){
$array['Book'.$i] = array('http://www.google.com', $i+20);
}
$needles = array('Book1', 'Book2');
$start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
array_searcher($needles, $array);
}
echo (microtime(true) - $start)."\n";
// 14.2093660831
$start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
array_searcher2($needles, $array);
}
echo (microtime(true) - $start)."\n";
// 0.00858187675476
答案 1 :(得分:2)
如果您想使用密钥进行搜索,则应将其作为密钥访问=&gt;价值对。 如果不这样做,它只会检索该值。
function array_searcher($needles, $array)
{
foreach ($needles as $needle)
{
foreach ($array as $key => $value)
{
if ($key == $needle)
{
echo $key;
}
}
}
}