比较关联数组与php中的简单数组

时间:2013-02-19 17:43:18

标签: php associative-array

我有一个简单的会话数组,我在其中推送页面标题,如字符串:

$_SESSION['sesArray'][] = $pageTitle;

和另一个带有页面标题和链接的预定义关联数组:

$assoc=array(array('title' => 'page title', 'link' => 'page link'));

会话数组充满了标题,所以我正在重复:

$array1 = array_unique($_SESSION['sesArray']);

我的问题是:如何将$ assoc数组与$ array1进行比较,以检查两者中存在的页面标题并消除它们,最后是另一个包含唯一标题和链接的数组? 我尝试过使用:

$result= array_diff_key($assoc, $array1 );

但是有些重复的标题确实被删除了,有些则没有。

有什么想法吗?

ETA数据:

$array1= array('Museum', 'Club'); 
$assoc= array(array('title' => 'Museum', 'link' => 'museum.php' ),
              array('title' => 'club', 'link' => 'club.php'));

2 个答案:

答案 0 :(得分:1)

你并没有真正做差异,因为根据定义,数组数组与标量数组没有任何共同之处。您需要做的是根据$assoc的内容过滤 $array1。试试这个:

$array1= array('Museum','Club');
$assoc= array(array('title' => 'Museum', 'link' => 'museum.php' ),
        array('title' => 'club', 'link' => 'club.php'));

$fn = function($arr) use ($array1) {
    return !in_array($arr['title'], $array1);
};
$result =array_filter($assoc, $fn);

答案 1 :(得分:0)

啊,臭名昭着的技术访谈问题(“比较2个数组并查找常用条目”)。

尝试以下方面:

$ass = array_keys($assoc);

foreach($ass as $a)
{
   while (isset($_SESSION['sesArray'][$a]))
   {
     unset($_SESSION['sesArray'][$a]);
   }
}

PHP关联其元组数组的方式允许您避免此问题的丑陋O(n ^ 2)复杂性。