#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
)
Ответ №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);