2013-03-08 2 views
-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); должно быть массивом с одним пунктом - «Юг», правильно?

Но его возвращение, то, что кажется, все в одном из массивов ... Я не могу за жизнь мне получить его на работу ..

Используя приведенный выше пример, мне нужно вернуть «юг» в переменную.

+2

'array_intersect' не будет работать, как вы ожидаете с многомерными массивами. – nickb

+2

не является «глобальным» дублированным тоже? – Buksy

+0

@nickb ok, так что вы можете помочь мне в том, что я * должен использовать? – Mark

ответ

0

Итак, вы ищете предметы, которые находятся в обоих массивах? ...

А что-то вроде этого:

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

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

    return $list; 
} 
+1

У этого есть больше синтаксических ошибок, чем сценарий, написанный моей кошкой, прыгающей на клавиатуре. – Shoe

+0

Вы правы, я исправил его ... – Buksy

+2

Все еще неправильно. Вы обрабатываете эти массивы как одномерные массивы, они двумерные. – Shoe

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 обрабатывать такие вещи.

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 для тестирования.

Смежные вопросы