0

我找到了一些在 php 字符串之间返回公共值的好方法(通过explode & array_intersect 等),但到目前为止返回不常见值的方法不多。

我确实找到了一个解决不常见值的问题,解决方案使用了 array_diff 和 array_merge。我很难让它看起来在实际值内,以满足我的需要。

我正在使用一个遗留数据库,围绕它构建了足够的代码来使适当的规范化成为白日梦,并且非常感谢任何见解。

我在 mysql 数据库表中有两列,a & b。a 列的数据在 b 中重复,用空格隔开。我需要选择/查询/公开 b 中的非重复数据。它们之间有一个空间,但它不是唯一一个,这让我发疯,因为爆炸/内爆不会削减它(或者我不知道如何实现它)。

现存的:

a Apples, Apples Blue, Apples Red Big

b Apples Oranges、Apples Blue Bananas、Apples Red Big Ruby Red Grapefruit

我需要:橙子、香蕉、红宝石红葡萄柚

有什么想法吗?

4

3 回答 3

0

根据您上面的示例列值和结果,我假设您只需要比较同一索引处的值。Appleswith Apples Oranges, Apples Bluewith Apples Blue Bananas, and Apples Red BigwithApples Red Big Ruby Red Grapefruit因为你不期望输出像Blue Bananasor Red Big Ruby Red Grapefruit

所以你可以尝试这样的事情:

$non_duplicates = array();
foreach($columnA as $idx => $val) {
    $pos = strstr($columnB[$idx], $val);

    if($pos !== false)
        $non_duplicates[] = str_replace($val . " ", "", $columnB[$idx]);
}

var_dump($non_duplicates);
于 2012-12-12T07:25:12.917 回答
0

这应该是你要找的...

$a = 'Apples, Apples Blue, Apples Red Big';
$b = 'Apples Oranges, Apples Blue Bananas, Apples Red Big Ruby Red Grapefruit';

$diff = array_diff(toArray($b), toArray($a)); //diff between b and a
var_dump($diff);

function toArray($str){
  $str = trim(str_replace(array(',','  '), array('',' '), $str));  //clean string up
  return array_unique(explode(' ', $str));  //explode into array by spaces and make unique.
}

输出:

数组(4){[1]=>字符串(7)“橙子”[4]=>字符串(7)“香蕉”[8]=>字符串(4)“红宝石”[10]=>字符串(10) “西柚” }

于 2012-12-12T08:40:47.053 回答
0

更新:我在 php.net 上发现了一个使用 strstr() 的方法(在下面使用)。链接:http ://php.net/manual/en/function.strstr.php 提供者:root at mantoru dot de

$needle = 'Apples Red Big';
$haystack = 'Apples Red Big Ruby Red Grapefruit';

function strstr_after($haystack, $needle, $case_insensitive = false) {
$strpos = ($case_insensitive) ? 'stripos' : 'strpos';
$pos = $strpos($haystack, $needle);
if (is_int($pos)) {
    return substr($haystack, $pos + strlen($needle));
}
// Most likely false or null
return $pos;
}

$goal = strstr_after($haystack, $needle);
echo $goal;

回报:宝石红葡萄柚

于 2013-03-05T23:23:57.967 回答