比较2个数组中的2个数组值Php

时间:2022-11-29 20:42:22

I have deleted the old post to make this more clear. I have 2 arrays that I need to compare and match but only if 2 values per array are the same.

我删除了旧帖子以使其更清晰。我有2个数组,我需要比较和匹配,但只有每个数组2个值相同。

$array1 = $plugins
$array2 = $xml_dump

$ array1 = $ plugins $ array2 = $ xml_dump

A sample of what both arrays look like:

两个数组的样本:

$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
                )

I need it to return the value ( or return true) only if $array1 Name , Version matches $array2 name ,ex_version

仅当$ array1 Name,Version与$ array2 name,ex_version匹配时,我才需要它返回值(或返回true)

In the example above you can see that

在上面的示例中,您可以看到

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

///has a match in 

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

I have tried many variations of array_intersect but I cannot get it to match 2 values for each array.

我已尝试过array_intersect的许多变体,但我不能让它匹配每个数组的2个值。

3 个解决方案

#1


2  

If I understood you right this should do it:

如果我理解你的话,应该这样做:

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

Your question is very confusing, you are talking about $array1 and $array2 but I see four of them!

你的问题很混乱,你在谈论$ array1和$ array2,但我看到其中四个!

Anyway, have you tried the following? This is just a wild guess, but...

无论如何,你试过以下吗?这只是一个疯狂的猜测,但......

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

If this doesn't work, I suggest you drop your real world arrays and create some simple / small dummy ones instead and provide us with the result you want to archive for the very same dummy data.

如果这不起作用,我建议您删除现实世界的数组并创建一些简单/小的虚拟数据,并为我们提供您想要存档的相同虚拟数据的结果。

#2


1  

<?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


0  

Just wanted to close this with what ended up being my solution.

只是想结束这个最终成为我的解决方案。

I grab the Name and Version for both arrays and created a new array for each one, that way I could easily use array_intersect and manipulate they arrays. So to get this to work I just needed to create two new arrays with the values I wanted to compare.

我获取了两个数组的名称和版本,并为每个数组创建了一个新数组,这样我就可以轻松地使用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);

#1


2  

If I understood you right this should do it:

如果我理解你的话,应该这样做:

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

Your question is very confusing, you are talking about $array1 and $array2 but I see four of them!

你的问题很混乱,你在谈论$ array1和$ array2,但我看到其中四个!

Anyway, have you tried the following? This is just a wild guess, but...

无论如何,你试过以下吗?这只是一个疯狂的猜测,但......

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

If this doesn't work, I suggest you drop your real world arrays and create some simple / small dummy ones instead and provide us with the result you want to archive for the very same dummy data.

如果这不起作用,我建议您删除现实世界的数组并创建一些简单/小的虚拟数据,并为我们提供您想要存档的相同虚拟数据的结果。

#2


1  

<?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


0  

Just wanted to close this with what ended up being my solution.

只是想结束这个最终成为我的解决方案。

I grab the Name and Version for both arrays and created a new array for each one, that way I could easily use array_intersect and manipulate they arrays. So to get this to work I just needed to create two new arrays with the values I wanted to compare.

我获取了两个数组的名称和版本,并为每个数组创建了一个新数组,这样我就可以轻松地使用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);