PHP array_push多维关联数组来维护结构

时间:2011-04-27 15:02:15

标签: php arrays search

我有一个数组:

 $array= array(
        'Book1' => array('http://www.google.com', '45' ),
        'Book2' => array('http://www.yahoo.com', '46',
        'Book3' => array('http://www.excite.com', '47', )

我正在尝试编写一个函数,您可以搜索并返回$ keys和$值完整的数组。因此,如果有人在哪里搜索“'Book1','Book2',那么他们会找回一个数组:

$results = array( 'Book1' => array('http://www.google.com', '45' ), 'Book2' => array('http://www.yahoo.com', '46',))

此:

$bookArray = array()
$bookDetailsarray = array();

$needles  = array('book1' , 'book2' ); 

   foreach ($needles as $needle) {

    foreach ($array as $key => $value) 
        { 

            if ($key == $needle) 
                { 
                array_push($BookArray, $key);
                array_push($bookDetailsarray, $value);
                array_push($bookArray, $bookDetailsarray);                                                          
                }             
        }
     }


  } 

这是有效的,但是在foreach的每次迭代中,它都会将$ bookDetailsaray添加到$ value。所以它返回:

Book1 => [0]'Book1details' 
Book2 => [0]'Book1details' [1]'Book2details'
Book3 => [0]'Book1details' [1]'Book2details' [2] 'Book3details'

等等。

我希望能够做到:

array_push($BookArray, $key=>$value);

但显然这是不可能的。 有任何想法吗?即使它只是我需要的数组函数。

2 个答案:

答案 0 :(得分:2)

使用基本PHP函数而不是循环来进行搜索的稍微有效的方法:

$searchArray = array( 'Book1' => array('http://www.google.com', '45' ),
                      'Book2' => array('http://www.yahoo.com', '46'),
                      'Book3' => array('http://www.excite.com', '47' )
                    );

$needles = array('Book1','Book3');

$searchResults = array_intersect_key($searchArray,array_flip($needles));

var_dump($searchResults);

但请注意,它区分大小写

修改

如果您想要不区分大小写的搜索,则可以使用array_intersect_ukey()代替,使用自定义比较来忽略密钥的大小写。

function key_compare_func($key1, $key2) {
    $key1 = strtoupper($key1);
    $key2 = strtoupper($key2);

    if ($key1 == $key2)
        return 0;
    else if ($key1) > $key2)
        return 1;
    else
        return -1;
}

$searchResults = array_intersect_ukey($searchArray, array_flip($needles), 'key_compare_func');

编辑2

使用strcasecmp()可以使用户定义的密钥比较更简单。

function key_compare_func($key1, $key2) {
    return strcasecmp($key1,$key2);
}

答案 1 :(得分:0)

使用这个逻辑(虽然,我不是100%你想要最后一行做什么?)

$BookArray[]=$key;
$bookDetailsarray[]=$value;
$bookArray[]=$bookDetailsarray;