-1

単純なセッション配列があり、ページ タイトルを文字列としてプッシュしています。

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

2 に答える 2

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);
于 2013-02-20T12:24:40.980 に答える
0

ああ、悪名高い技術面接の問題 (「2 つの配列を比較し、共通のエントリを見つける」)。

次の行に沿って何かを試してください:

$ass = array_keys($assoc);

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

PHP がタプル配列を関連付ける方法により、この問題の醜い O(n^2) の複雑さを回避できます。

于 2013-02-19T18:05:10.403 に答える