php怎么计算字符串交集?$str0="white west";
$str1="west north east south";
怎样得到
$str="west"?

解决方案 »

  1.   


    $str0 = "white west";
    $str1 = "west north east south";
    $a = explode(" ",$str0);
    $b = explode(" ",$str1);
    $result = array_intersect($a,$b);
    print_r($result);输出:
    Array
    (
        [1] => west
    )
      

  2.   


    如果有规则的分隔符,先分隔为数组,再使用数组交集函数进行取交集,参考:explode
    (PHP 4, PHP 5)explode — 使用一个字符串分割另一个字符串说明
    array explode ( string $separator , string $string [, int $limit ] )
    此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。 如果 separator 为空字符串(""),explode() 将返回 FALSE。如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组。 如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。 由于历史原因,虽然 implode() 可以接收两种参数顺序,但是 explode() 不行。你必须保证 separator 参数在 string 参数之前才行。 Note: 参数 limit 是在 PHP 4.0.1 中加入的。 Example #1 explode() 例子<?php
    // 示例 1
    $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
    $pieces = explode(" ", $pizza);
    echo $pieces[0]; // piece1
    echo $pieces[1]; // piece2// 示例 2
    $data = "foo:*:1023:1000::/home/foo:/bin/sh";
    list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
    echo $user; // foo
    echo $pass; // *?> 
    Example #2 limit 参数例子<?php
    $str = 'one|two|three|four';// 正数的 limit
    print_r(explode('|', $str, 2));// 负数的 limit(自 PHP 5.1 起)
    print_r(explode('|', $str, -1));
    ?> 
    以上例程会输出:Array
    (
        [0] => one
        [1] => two|three|four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
    )Note: 此函数可安全用于二进制对象。=======================================================================array_intersect
    (PHP 4 >= 4.0.1, PHP 5)array_intersect — 计算数组的交集说明
    array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
    array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。 
    Example #1 array_intersect() 例子<?php
    $array1 = array("a" => "green", "red", "blue");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_intersect($array1, $array2);
    ?> 
    这使得 $result 成为: Array
    (
        [a] => green
        [0] => red
    )Note: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。