-1

ここで頭を悩ませていることは、非常に単純だと確信しています...

私は2つの配列を持っています。

  • $post_catsこれは、特定の投稿が含まれるカテゴリです。
  • $ad_catsこれは、広告が配置されるカテゴリの配列です。

基本的に、投稿の選択されたカテゴリの配列に、広告カテゴリの配列内のアイテムと一致するカテゴリがある場合、一致する値/アイテムを返す必要があります。

$post_catsこれを返します

array(4) {    
  [0]=> array(1) { ["slug"]=> string(6) "energy" }    
  [1]=> array(1) { ["slug"]=> string(6) "global" }  
  [2]=> array(1) { ["slug"]=> string(8) "identify" }  
  [3]=> array(1) { ["slug"]=> string(5) "south" }  
}

これを$ad_cats返します

array(6) {   
  [0]=> array(1) { ["slug"]=> string(5) "north" }  
  [1]=> array(1) { ["slug"]=> string(5) "south" }  
  [2]=> array(1) { ["slug"]=> string(4) "east" }  
  [3]=> array(1) { ["slug"]=> string(4) "west" }  
  [4]=> array(1) { ["slug"]=> string(6) "global" }  
  [5]=> array(1) { ["slug"]=> string(8) "fallback" }  
}

そこにある重複したアイテムは「南」なので、私の考えでは、の値はarray_intersect($post_cats, $ad_cats);「南」という単一のアイテムを持つ配列でなければなりませんよね?

しかし、それが戻ってきたように見えますが、どちらかの配列のすべてが...私は一生それを機能させることができません..

上記の例を使用すると、「south」を変数に返す必要があります。

4

3 に答える 3

0

最良の方法は、これらの配列を配列で変換array_intersectできるようにすることです。考慮事項:

$a; // first array
$b; // second array

その後、あなたは行くでしょう:

$a1 = array();
foreach ($a as $v) $a1[] = $v['slug'];

$b1 = array();
foreach ($b as $v) $b1[] = $v['slug'];

$c = array_intersect($a1, $b1);

PHP関数は通常、あなたが思っているよりも強力なアルゴリズムで動作します。したがって、PHP関数にこの種の処理を任せるのは良い選択です。

于 2013-03-08T21:33:58.343 に答える
0

両方の配列にある項目を探していますか? ...

このようなものはどうですか:

function find_duplicate($array1, $array2)
{
  $list = array();

  foreach($array1 as $value1)
  {
    foreach($array2 as $value2)
    {
     if($value1 == $value2) $list[] = $value1;
    }
  }

  return $list;
}
于 2013-03-08T21:23:17.483 に答える
0

このソリューションはarray_map、値を取得するために使用し、その交点を取ります

function mapper($a) 
{
    return $a['slug'];
}

$set1 = array_map('mapper', $post_cats);
$set2 = array_map('mapper', $ad_cats);
$result = array_intersect($set1, $set2);

テスト用のPhpFiddle

于 2013-03-08T21:41:46.193 に答える