我发现了一些在php字符串之间返回常用值的好方法(通过explode& array_intersect等),但到目前为止还没有多少用于返回不常见的值。
我找到了一个解决不常见值的问题,the solution使用了array_diff& array_merge。我无法看到实际值,以满足我的需求。
我正在使用遗留数据库,围绕它构建了足够的代码,以使正确的规范化成为一个梦想,并且非常感谢任何见解。
我在mysql数据库表中有两列,一个&湾列a的数据在b中重复,并用空格分隔它们。我需要在b中选择/查询/公开非重复数据。它们之间有一个空间,但它不是唯一的一个,这让我疯狂,因为爆炸/内爆不会削减它(或者我不知道如何实现它)。
现有:
苹果,苹果蓝,苹果红大
b 苹果橘子,苹果蓝香蕉,苹果红大红宝石红葡萄柚
我需要: 橘子,香蕉,红宝石红葡萄柚
有什么想法吗?
答案 0 :(得分:0)
根据您的示例列值和上面的结果,我假设您只需要比较同一索引处的值。 Apples
Apples Oranges
, Apples Blue
Apples Blue Bananas
Apples Red Big
与 Apples Red Big Ruby Red Grapefruit
,因为您不希望输出 Blue Bananas
或<强> 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);
答案 1 :(得分: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.
}
<强>输出:强>
array(4){[1] =&gt; string(7)“Oranges”[4] =&gt; string(7)“Bananas”[8] =&gt; string(4)“Ruby”[10] =&gt; string(10)“Grapefruit”}
答案 2 :(得分: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;
返回:Ruby Red Grapefruit