1

私は CakePHP 2.x に取り組んでいますが、今のところ私の質問は構文とは関係ありません。この問題の解決策が必要です:フィールド名mobile numbersがあるmessagesという名前のテーブルがあります。数値は次の形式です。

12345678 と +9112345678 .. どちらも同じです。唯一の違いは、1 つの番号で国コードが欠落していることです。

したがって、データベースでこのクエリを実行します。メッセージ テーブルから個別の番号を選択します。しかし、私が望むのは、これらの両方の数値を 1 つにまとめることです。これどうやってするの?私のDBには、国コードが異なるいくつかの番号があります。国コードがあるものとないものがありますが、両方を1つにまとめたいと思います。国コードのあるものとコードのないもの。これはどのように行うことができますか?

時々、すべての個別の数値が格納されている配列があります。この配列には、次のような数値があります: 12345678 +9112345678

だから今、私はこれらの数字を1つに取ることができる論理を作る方法がわかりません. これに対する解決策がある場合は、いくつかのサンプル コードを共有してください。

4

1 に答える 1

2

データベースレベルでこれを行うことはできないと思います。

次のようにする必要があります。

  1. すべての国コード (+記号を含む)の配列を作成します

  2. データベースからすべての数字を取得する

  3. array_map()国コード配列の各要素に対してと をコールバック run で使用しstrpos(、一致した場合は番号から国コードを削除します

  4. 最後に、ステップ 4 が終了したら、数値配列を実行します。 array_unique()

コード:

$country_codes = array('+91', '+61');
$numbers_from_db = array('33445322453', '+913232', '3232', '+614343', '024343');

$sanitized_numbers = array_map(function($number) use ($country_codes){
    if(substr($number, 0, 1) === "0") {
        $number = substr($number, 1);
        return $number;
    }

    foreach($country_codes as $country_code) {
        if(strpos($number, $country_code) !== false) {
                $number = str_replace($country_code, "", $number);
                return $number;
        }
    }
    return $number;
}, $numbers_from_db);

$distinct_sanitized_numbers = array_unique($sanitized_numbers);

テスト済みの出力var_dump($distinct_sanitized_numbers)は次のとおりです。

array(4) {
  [0]=>
  string(11) "33445322453"
  [1]=>
  string(4) "3232"
  [3]=>
  string(4) "4343"
  [4]=>
  string(5) "24343"
}
于 2013-07-05T18:00:36.707 に答える