Сравнить 2 значения массива в 2 массивах Php

#php #arrays #compare

#php #массивы #Сравнить

Вопрос:

Я удалил старый пост, чтобы сделать это более понятным. У меня есть 2 массива, которые мне нужно сравнить и сопоставить, но только если 2 значения в массиве одинаковы.

$array1 = $plugins
$array2 = $xml_dump

Пример того, как выглядят оба массива:

 $plugins 

Array
(
    [all] => Array
        (
            [ajax-category-dropdown/dhat-ajax-cat-dropdown.php] => Array
                (
                    [Name] => Ajax Category Dropdown
                    [PluginURI] => http://www.example.com/ajax/
                    [Version] => 0.1.5
                    [Description] => Generates multi-level ajax. 
                    [Author] => DyasonHat
                    [AuthorURI] => http://www.dyasonhat.com
                    [Title] => Ajax Category Dropdown
                    [AuthorName] => Dya
                )

            [akismet/akismet.php] => Array
                (
                    [Name] => Akismet
                    [PluginURI] => http://akismet.com/
                    [Version] => 2.5.3
                    [Description] => Used by millions
                    [Author] => Automattic
                    [AuthorURI] => http://automattic.com/
                    [Title] => Akismet
                    [AuthorName] => Automattic
                )


$xml_dump
SimpleXMLElement Object
(
    [plugin] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [name] => Ajax Category Dropdown
                    [ex_version] => 0.1.5
                    [ex_date] => 2008-01-03
                    [plugin_url] => http://wordpress.org/extend/plugins/wp-contactform/
                    [advisory_url] => http://osvdb.org/show/osvdb/43284
                )

            [1] => SimpleXMLElement Object
                (
                    [name] => WP-ContactForm
                    [ex_version] => 2.0.7
                    [ex_date] => 2008-01-03
                    [plugin_url] => http://wordpress.org/extend/plugins/wp-contactform/
                    [advisory_url] => http://osvdb.org/show/osvdb/43284
                )

            [2] => SimpleXMLElement Object
                (
                    [name] => Math Comment Spam Protection
                    [ex_version] => 2.1
                    [ex_date] => 2008-01-03
                    [plugin_url] => http://wordpress.org/extend/plugins/math-comment-spam-protection/
                    [advisory_url] => a
                )
  

Мне нужно, чтобы он возвращал значение (или возвращал true), только если $ array1 Name , Version совпадает с $ array2 name , ex_version

В приведенном выше примере вы можете видеть, что

 $array1
Name => Ajax Category Dropdown
Version => 0.1.5

///has a match in 

$array2
name => Ajax Category Dropdown
ex_version => 0.1.5
  

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

Комментарии:

1. array_intersect — это то, что вам, вероятно, нужно

2. Это немного загадочно…

3. Да, это был способ загадочный, я полностью изменил его, так что, надеюсь, это более понятно.

Ответ №1:

Если я правильно вас понял, это должно сработать:

 array_intersect_assoc(array_intersect($global_plugins, $xml_plugins), array_intersect($plugin_verso, $xml_plugin_version));
  

Ваш вопрос очень запутанный, вы говорите о $array1 и $array2 , но я вижу четыре из них!

В любом случае, вы пробовали следующее? Это всего лишь предположение, но…

 $result = array_intersect($global_plugins, $xml_plugins, $xml_plugin_version, $plugin_verso);
  

Если это не сработает, я предлагаю вам отказаться от ваших массивов реального мира и вместо этого создать несколько простых / маленьких фиктивных массивов и предоставить нам результат, который вы хотите заархивировать для тех же самых фиктивных данных.

Комментарии:

1. Что-то вроде этого, но это возвращает 0, хотя оба array_intersect работают самостоятельно и возвращают значение.

2. @Wyck: Возможно, вам нужно использовать array_intersect() вместо array_intersect_assoc() ?

3. @Wyck: Было бы очень полезно, если бы вы могли поделиться образцом содержимого вашего массива и ожидаемым результатом.

4. Я попробовал просто array_intersect() без кубиков, я добавил дамп массива в OP.

5. Да, написание всего этого помогло, лол, я думаю, я мог бы создать функцию и использовать array_uintersect

Ответ №2:

 <?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?> 
The above example will output:

Array
(
    [a] => green
    [0] => red
)
  

http://php.net/manual/en/function .array-intersect.php

Ответ №3:

Просто хотел закрыть это тем, что в итоге стало моим решением.

Я беру Name и Version для обоих массивов и создал новый массив для каждого из них, таким образом, я мог бы легко использовать array_intersect эти массивы и манипулировать ими. Итак, чтобы заставить это работать, мне просто нужно было создать два новых массива со значениями, которые я хотел сравнить.

  $a = array();
 $b = array();

 //first foreach loop

 $find_local_plugs = $global_plugins_name . $plugin_version;
 $a[] = $find_local_plugs;

 //second foreach loop

 $find_remote_plugs = $xml_plugins . $xml_plugin_version;
 $b[] = $find_remote_plugs;


 $matches = array_intersect($a, $b);