2012-12-05 70 views
1

我試過在線搜索解決方案,但沒有運氣(我是PHP初學者)。我有兩個strings(具有時間戳的電話號碼的集合),其具有comma separated values。我需要檢查sting A之間的逗號之間的文本的特定部分是否可以在string B中找到。PHP字符串 - 如果在乾草堆中找到針的一部分

這裏是螫A的一個例子:

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

這裏是OG螫乙一個例子:

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 


在上述字符串中,下面兩個值是非常相似的(只時間戳中的幾秒不同):

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


我需要做的是COUNT逗號之間的值的string A匹配從時間戳最後5個字符那些string B除了可能是同一事件,而是用數字+/-幾秒鐘分開。


我曾想過使用PHP explode讓每一個值到一個數組,然後比較他們,但I'm在這一點而失去了當談到陣列,並就如何一個陣列值進行比較的其他減去一個值的最後5個字符。

+1

'substr($ s,0,-5)'得到字符串減5個字符。 –

+0

這些列表是否已分類?如果是的話,它會讓你的挑戰變得更容易。 – psyklopz

+0

stringA和stringB總是包含逗號之間相同數量的值嗎? – kennypu

回答

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); 
+0

謝謝。這工作得很好:) –

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. 
+0

謝謝。我會檢查這個解決方案。 –

1

老實說,我認爲這是比較有用的兩個字符串相結合,分析它們,然後查找電話號碼與多個電話。

<?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)

+0

謝謝。部分代碼實際上幫助我處理另一個項目:) –

相關問題