0

PHP文字列間で共通の値を返すための優れた方法をいくつか見つけましたが(explodeやarray_intersectなどを介して)、これまでのところ、珍しい値を返す方法はあまりありません。

私は珍しい値に対処する1つの質問を見つけました、そして解決策はarray_diffとarray_mergeを使用しました。自分のニーズに合わせて、実際の値の内部を見るのに苦労しました。

私はレガシーデータベースを使用しており、適切な正規化を夢のようなものにするために十分なコードが構築されています。洞察をいただければ幸いです。

mysqldbテーブルにaとbの2つの列があります。列aのデータはbに複製され、スペースで区切られています。bの重複しないデータを選択/クエリ/公開する必要があります。それらの間にスペースがありますが、爆発/崩壊がそれをカットしないので(またはそれを実現する方法がわかりません)、私を狂わせているのはそれだけではありません。

既存:

りんご、りんごブルー、りんごレッドビッグ

bリンゴオレンジ、リンゴブルーバナナ、リンゴレッドビッグルビーレッドグレープフルーツ

必要なもの:オレンジ、バナナ、ルビーレッドグレープフルーツ

何かご意見は?

4

3 に答える 3

0

上記のサンプル列の値と結果に基づいて、同じインデックスの値を比較するだけでよいと思います。Appleswith Apples OrangesApples Bluewith Apples Blue BananasApples Red Bigwithは、またはApples Red Big Ruby Red Grapefruitのような出力を期待しないためです。Blue BananasRed 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.
}

出力:

array(4){[1] => string(7) "Oranges" [4] => string(7) "Bananas" [8] => string(4) "Ruby" [10] => string(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 に答える