сравнить массивы: один массив содержится во втором массиве (ключ + значение) - PullRequest
2 голосов
/ 22 июля 2010

я хочу проверить, содержится ли один массив во втором массиве, но тот же ключ и те же значения,

(не обязательно должны быть равными, только убедитесь, что все ключ и значение в одном массиве находятся во втором)

Простая вещь, которую я делаю до сих пор:

function checkSameValues($a, $b){

        foreach($a as $k1 => $v1){                                  
            if($v1 && $v1 != $b[$k1]){
                return false;
                break;                                      
            }
        }
        return true;
    }

Есть ли более простой (более быстрый) способ проверить это?

спасибо

Ответы [ 4 ]

3 голосов
/ 22 июля 2010

Я бы сделал

$array1 = array("a" => "green", "b" => "blue", "c" => "white", "d" => "red");
$array2 = array("a" => "green", "b" => "blue", "d" => "red");
$result = array_diff_assoc($array2, $array1);
if (!count($result)) echo "array2 is contained in array";
1 голос
/ 22 июля 2010

Как насчет ...

$intersect = array_intersect_assoc($a, $b);
if( count($intersect) == count($b) ){
    echo "yes, it's inside";
}
else{
    echo "no, it's not.";
}

array_intersect_assoc array_intersect_assoc () возвращает массив, содержащий все значения array1которые присутствуют во всех аргументах.

0 голосов
/ 22 июля 2010

Это, очевидно, проверяет только глубину = 1, но может быть легко адаптировано для рекурсии:

// check if $a2 is contained in $a1
function checkSameValues($a1, $a2)
{
    foreach($a1 as $element)
    {
        if($element == $a2) return true;
    }
    return false;
}

$a1 = array('foo' => 'bar', 'bar' => 'baz');
$a2 = array('el' => 'one', 'another' => $a1);

var_dump(checkSameValues($a2, $a1)); // true
0 голосов
/ 22 июля 2010
function checkSameValues($a, $b){
   if ( in_array($a,$b) ) return true;
   else return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...