PHP按键和返回键搜索多维关联数组=>值

时间:2011-04-27 13:50:33

标签: php arrays

您好我有一个多维关联数组:

   $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' ); 

但这不会返回任何东西

2 个答案:

答案 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; 
            } 
        }
    }
}