1

オンラインで解決策を探してみましたが、うまくいきませんでした (私は PHP の初心者です)。を持っている 2 つstrings(タイムスタンプ付きの電話番号のコレクション) がありcomma separated valuesます。からのコンマの間のテキストの特定の部分が にあるかどうかを確認する必要がありsting Aますstring B

スティング A の例を次に示します。

9858264-2012-12-05T00:11:28.806Z,1265482-2012-12-05T22:19:49.769Z,9598643-2012-12-05T22:46:17.115Z,

次に、文字列 B の例を示します。

5555649-2012-12-05T22:37:23.765Z,3594595-2012-12-05T22:44:36.363Z,8549851-2012-12-05T22:46:01.259Z,9598643-2012-12-05T22:46:09.600Z


上記の文字列では、以下の 2 つの値は非常に似ています (タイムスタンプの数秒だけが異なります)。

From string A: 9598643-2012-12-05T22:46:17.115Z
From string B: 9598643-2012-12-05T22:46:09.600Z


私がする必要があるのは、タイムスタンプの最後の 5 文字とは別に一致するCOUNTコンマ間の値の数です。それらは同じ出現である可能性がありますが、+/- 数秒離れています。string Astring B


私はphpexplodeを使用してすべての値を配列に入れてから比較することを考えましたが、配列に関してはこの時点でかなり迷っています。値。

4

3 に答える 3

1

正直なところ、2つの文字列を組み合わせて解析し、複数の通話がある電話番号を探す方が便利だと思います。

<?php
$input =
   trim(
      '9858264-2012-12-05T00:11:28.806Z,1265482-2012-12-05T22:19:49.769Z,9598643-2012-12-05T22:46:17.115Z,' .
      '5555649-2012-12-05T22:37:23.765Z,3594595-2012-12-05T22:44:36.363Z,8549851-2012-12-05T22:46:01.259Z,9598643-2012-12-05T22:46:09.600Z',
      ','
   ); //gets rid of leading/trailing commas
$raw_arr = explode(',', $input);

$phone_records = array();

foreach( $raw_arr as $entry ) {
   $temp = explode('T', $entry);
   $time = $temp[1];
   $temp = explode('-', $temp[0]);
   $phone = array_shift($temp);
   $date = implode('-', $temp);

   if( ! isset($phone_records[$phone]) ) {
      $phone_records[$phone] = array();
   }
   $phone_records[$phone][] = array($date, $time);
}

//print_r($phone_records);

foreach( $phone_records as $number => $entries ) {
   if( count($entries) > 1 ) {
      printf('%s: %s', $number, var_export($entries, TRUE));
   }
}

出力:

9598643: array (
  0 =>
  array (
    0 => '2012-12-05',
    1 => '22:46:17.115Z',
  ),
  1 =>
  array (
    0 => '2012-12-05',
    1 => '22:46:09.600Z',
  ),
)

このコードを使用して、各入力を独自の配列に解析し、foreachループを使用して配列を実行し、値がであるかどうかを確認することもできますarray_key_exists($arr1_key, $arr2)

于 2012-12-05T23:48:29.153 に答える
1

このようなことができます。

function make_string_into_nice_array ($string) {
    $string_array = explode(',',$string);
    return array_map(function($str) {
        return substr($str, 0, -5);    
    }, $string_array);
}

$array_a = make_string_into_nice_array($string_a);
$array_b = make_string_into_nice_array($string_b);

$matched_array = array_intersect($array_a, $array_b);

echo count($matched_array);
于 2012-12-05T23:41:49.857 に答える
1

これを試して:

$arrayA = explode(',', $StringA); // Parse the string into array elements, using comma as delimiter.
$arrayB = explode(',', $StringB);

$matches = array(); // Declare the array that will be the output.
foreach ($arrayA as $aValue) { // Iterate through each element of A.
    foreach ($arrayB as $bValue) { // Iterate through each element of B.
        // Take the value of element A (chopping off the last 5 characters) and compare with the value of element B (chopping off the last 5 characters)
        if (substr($aValue, 0, strlen($aValue)-5) == substr($bValue, 0, strlen($bValue)-5))) {
            // If there's a match, iterate the count of that particular key in your output array.
            $matches[substr($aValue, 0, strlen($aValue)-5)] += 1;
        }
    }
}
echo count($matches); // Print the number of keys that are duped.
print_r($matches); // Look at each individual key and the number of duplicated instances.
于 2012-12-05T23:45:50.617 に答える