Сравните 2 значения массива в 2 массива Php - PullRequest
5 голосов
/ 28 апреля 2011

Я удалил старый пост, чтобы сделать это более понятным. У меня есть 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 значениям для каждого массива.

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

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

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 голос
/ 28 апреля 2011
<?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

0 голосов
/ 11 мая 2011

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

Я беру 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...