php中的array_intersect()具有特殊用途

Posted

技术标签:

【中文标题】php中的array_intersect()具有特殊用途【英文标题】:array_intersect() in php with special purpose 【发布时间】:2011-09-08 15:41:04 【问题描述】:

你好需要在一个特殊的函数中相交两个数组。这两个数组是:

Array A ( 
[0] => 104-20_140.1 [1] => 104-10_136.1 [2] => 104-40_121.1 [3] => 104-41_122.1 
[4] => 200-42_951.1 [5] => 200-43_952.1 [6] => 200-44_123.1 [7] => 200-45_124.1
[8] => 300-46_125.1 [9] => 300-47_126.1 [10] => 300-48_127.1 [11] => 300-49_128.1
[9] => 380-56_125.1 [10] => 380-57_126.1 [11] => 380-58_127.1 [12] => 380-59_128.1 
)

Array B ( 
[0] => 200 [1] => 300 
)

我需要两次查看数组 A 的值的开头。前任。 [0] => 104-20_140 并查看开头的 '104' 是否存在于数组 B 中。如果不是,则数组 A 应将其从结果数组 C 中删除。

数组 A 和 B 的输出应具有:

Array C ( 
[0] => 200-42_951.1 [1] => 200-43_952.1 [2] => 200-44_123.1 [3] => 200-45_124.1
[4] => 300-46_125.1 [5] => 300-47_126.1 [6] => 300-48_127.1 [7] => 300-49_128.1
)

全部以php计算

感谢所有帮助!

【问题讨论】:

【参考方案1】:

试试这个:

function startsWith($haystack, $needle) 
    $length = strlen($needle);
    return (substr($haystack, 0, $length) === $needle);


$C = array();
foreach ($A as $ka => $va) 
    foreach ($B as $kb => $vb) 
        if (startsWith($va, $vb)) 
            $C[] = $va;
        
    

example on codepad

【讨论】:

谢谢,我工作得很完美。我需要改变的是函数startsWith()中的返回值返回(substr($haystack, 0, $length) == $needle); 【参考方案2】:

很有可能,您真正需要的是 array_uintersect。这将提供提供自定义回调的选项,其中包含有关如何检查值是否相交的逻辑。

http://uk3.php.net/manual/en/function.array-uintersect.php

在回调中,您需要使用 substr 或其中一个 preg 函数解析出第一个“-”之前的第一部分。

【讨论】:

以上是关于php中的array_intersect()具有特殊用途的主要内容,如果未能解决你的问题,请参考以下文章

PHP array_intersect + array_flip 具有多次值的数组

php函数array_intersect中的参数问题

php - 数组中的值的“前两个单词”多重匹配然后array_intersect?

php动态array_intersect

foreach 循环中的array_intersect

PHP:正则表达式替代 array_intersect