【问题标题】:PHP Compare 2 arrays checking if part of value exist in the other onePHP比较2个数组检查另一个值是否存在
【发布时间】:2015-04-10 15:24:06
【问题描述】:

我在论坛中查找了很多几乎相同的主题,但不是我要找的:

我有 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 数组中一样,具有精确的路径。但如果在第一个数组中存在另一条路径,则不会。 我自己解释吗? 感谢您的帮助 干杯

【问题讨论】:

  • 您想要 $filterNames 中不在 $files 中的那些或什么?此示例中的预期输出是什么?
  • edit您的问题,包括您期望的输出应该是什么以及当前代码的行为方式。
  • 您所描述的是一个数组交集。我相信this question 就是您要找的。​​span>
  • 只是为了确定;在上面的$filterNames 中,是media/14-15/11235231video1.flv 还是media/14-15/11235231/video1.flv/video1.flv 之前)?
  • 嗨,$filternames 包含这个数组和路径和文件。事实上,比较数组不需要获取路径的重要性。就像我在下面的帖子中所说的那样,我需要一个包含 $files 数组中存在的文件的数组,而 $filternames 中已经存在没有文件(有或没有其他路径)。 / 不相关。谢谢提问

标签: php arrays compare


【解决方案1】:

我不确定它的预期输出是什么,但这里有一个示例。在示例中,“匹配”数组将是具有这些值的键值数组:

[
'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);
        }
    }   

}
}

【讨论】:

  • 大家好,仍然不知道怎么做。看看@你的建议,但无法完成。还有其他帮助吗? :) 谢谢
【解决方案2】:

感谢您的时间和回答。

首先,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 中的。但不想拥有两倍的文件,即使数据库中已经存在 我自己解释一下吗? 感谢帮助

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多