如何解决PHP array_push多维关联数组保持结构
| 我有一个数组: $array= array(
\'Book1\' => array(\'http://www.google.com\',\'45\' ),\'Book2\' => array(\'http://www.yahoo.com\',\'46\',\'Book3\' => array(\'http://www.excite.com\',\'47\',)
并试图编写一个函数,在其中可以搜索并返回完整保留$ keys和$ values的数组。因此,如果有人在哪里搜索\“ \'Book1 \',\'Book2 \',那么他们将返回一个数组:
$results = array( \'Book1\' => array(\'http://www.google.com\',))
这个:
$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);
但显然那是不可能的。
有任何想法吗?即使它只是我需要的数组函数。
解决方法
使用基本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);
}
,请改用此逻辑(尽管我不是您要最后一行做的100%吗?)
$BookArray[]=$key;
$bookDetailsarray[]=$value;
$bookArray[]=$bookDetailsarray;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。