我有一个数组:
$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);
但显然这是不可能的。 有任何想法吗?即使它只是我需要的数组函数。
答案 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;