PHP比较2个数组,检查另一个数据中是否存在部分值

时间:2015-04-10 15:24:06

标签: php arrays compare

我查看了论坛,发现了很多几乎相同的主题但不是我正在寻找的内容:

我有1个数组:

$filterNames : Array
(
    [0] => 11424205969default-img.jpg
    [1] => myimage.png
    [2] => media/14-15/11235231video1.flv
    [3] => likemedia/10-12/233569video2.mp4
)

另一个像:

$files : Array
(
    [0] => /mypath/materiales/media/14-15/video1.flv
    [1] => /mypath/materiales/likemedia/10-12/video2.mp4
)

我需要获取第一个数组中尚不存在的值数组。但由于价值不相同,我无法使其发挥作用。

类似的东西:

function array_check($files, $keyword) {
    $out = array();
    foreach($files as $index => $string) {
        if (strpos($string, $keyword) !== FALSE) {
            foreach ($filterNames as $namesF) {
                $out[] = array_check(array($files,'stackoverflow'),$namesF);
            }
        } 
    }
}

我的问题与AbraCadaver提出的问题不同,因为数组的值并不完全相同,在本例中,它们都是相同的(数字)

我需要一个只有单个值的输出数组,就像它们在$ files数组中一样,具有精确路径。但是如果在第一个数组中存在另一个路径则不会出现。 我能自己解释一下吗? 谢谢你的帮助 欢呼声

2 个答案:

答案 0 :(得分:0)

我不确定这个的预期输出是什么,但这是一个例子。在示例中,'match'数组将是具有以下值的键值数组:

[
'thing-one.jpg'] => 0
]

其中值(0)是找到匹配项的键(属于arr2)。您可以使用键('thing-one.jpg')使用简单的“in_array()”搜索来获取它在arr1中出现的键。

$arr1 = [
[0] => 'folder/other-thing/thing-one.jpg'
[1] => 'folder/other-thing/thing-two.prj'
[2] => 'folder/other-thing/thing-three.png'
];

$arr2 = [
    [0] => 'omg/lol/thing-one.jpg',
    [1] => 'omg/lol/thing-eight.wtf'
];

function findAllTheThings($arr1, $arr2) {
    $match = [];
foreach ($arr1 as $path) {

    $sub_strings = explode('/', $path);

    foreach ($sub_strings as $piece) {
        if (in_array($piece, $arr2)) {
            // we have a match in the path
            $match[$piece] = in_array($piece, $arr2);
        }
    }   

}
}

答案 1 :(得分:0)

感谢您的时间和回答。

首先,php给我一个错误$ match = [];所以我把array(); 然后我把代码添加一个返回行,但是$ out数组是空的。

function findAllTheThings($arr1, $arr2) {
					$match = array();
				foreach ($arr1 as $path) {
				
					$sub_strings = explode('/', $path);
				
					foreach ($sub_strings as $piece) {
						if (in_array($piece, $arr2)) {
							// we have a match in the path
							$match[$piece] = in_array($piece, $arr2);
						}
					}   
				
				}
				return $match;
			}
			$out = findAllTheThings($filterNames, $files);

仍在挖掘;) 谢谢你的帮助

编辑: 多谢你们。 我需要一个给出的数组

$files : Array
(
    [0] => /mypath/materiales/media/14-15/video1.flv
    [1] => /mypath/materiales/likemedia/10-12/video2.mp4
)

实际上我有一个包含这些值的数组,我需要过滤以排除数据库中已有的所有文件。 此数组将在db中插入。但即使DB中已经存在,也不希望有两倍的文件 我自己解释一下吗? 谢谢你的帮助