извлечь значения из многомерного массива - PullRequest
0 голосов
/ 09 августа 2010

У меня есть два массива, которые имеют такую ​​структуру

$array1 = Array
 (
     [0] => Array
         (
             ['story_id'] => 47789
         )

     [1] => Array
         (
             ['story_id'] => 47779
         )

     [2] => Array
         (
             ['story_id'] => 47776
         )

     [3] => Array
         (
             ['story_id'] => 47773
         )

     [4] => Array
         (
             ['story_id'] => 47763
         )
 )


$array2 = Array
 (
     [0] => Array
         (
             ['story_id'] => 47789
         )

     [1] => Array
         (
             ['story_id'] => 47777
         )

     [2] => Array
         (
             ['story_id'] => 47776
         )

     [3] => Array
         (
             ['story_id'] => 47773
         )

     [4] => Array
         (
             ['story_id'] => 47763
         )
 )

, и я хочу получить отличие array1 от array2, поэтому я попытался использовать

    $results = array_diff($array1, $array2);

, но оказалось пустымЕсть ли какой-нибудь простой способ обойти это или лучше для меня, чтобы сварить массивы, и если так, есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 10 августа 2010

Это потому, что array_diff используется только для 1-мерного массива. Для вашего 2 массива, давайте использовать некоторый код из php.net

function multidimensional_array_diff($a1, $a2)
{
$r = array();

foreach ($a2 as $key => $second) {
    foreach ($a1 as $key => $first) {

        if (isset($a2[$key])) {
            foreach ($first as $first_value) {
                foreach ($second as $second_value) {
                    if ($first_value == $second_value) {
                        $true = true;
                        break;
                    }
                }
                if (!isset($true)) {

                    $r[$key][] = $first_value;
                }
                unset($true);
            }
        } else {
            $r[$key] = $first;
        }
    }
}
return $r;
}
...