2014-05-07 40 views
1

我有一個1和0的數組。PHP&Arrays:檢查long1與1s和0s是否包含短array2只有1s,獲得鍵和匹配鍵array3

例子:

array1(0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1) 

我需要檢查,如果該數組包含另一個數組:

array2(1,1) 

,我需要拿到鑰匙的地方發生的所有實例,然後對陣的關鍵另一組日期。

實施例:

array3(20140425,20140426,20140427,20140428,20140429,20140430,20140501,20140502,20140503,20140504,20140505,20140506,20140507,20140508,20140509,20140510,20140511,20140512,20140513,20140514,20140515,20140516,20140517,20140518,20140519) 

所述陣列不能被重新排序。

在檢查,如果陣列1中包含的結果上面的例子數組2可能是:

9,16,17,18,19… etc… 

然後對ARRAY3相應的檢查會產生:

20140504,20140511,20140512,20140513,20140514 etc. 

我相信array_searcharray_keys可能保持答案,但在數據嚴重黑客攻擊兩週後,我現在無法理解它。

+0

你的問題和/或要求是含糊不清。爲什麼你在第一場比賽中得到16和17? – Ejaz

+0

一個可能的解決方案是將數組內插入字符串,然後執行preg_match返回每個匹配的索引。 –

+0

謝謝@Ejay。在這個例子中,可能的結果是9,16,17,18,19,20,21,22,23。這些是1,1對存在的地方。這僅僅是一個例子。 –

回答

0

我不認爲這是可能的內置函數。我會做「步行」:

// Define data 
$source=array(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1); 
$search=array(1, 1); 
$dates=array(20140425, 20140426, 20140427, 20140428, 20140429, 20140430, 20140501, 20140502, 20140503, 20140504, 20140505, 20140506, 20140507, 20140508, 20140509, 20140510, 20140511, 20140512, 20140513, 20140514, 20140515, 20140516, 20140517, 20140518, 20140519); 

// Search second array in first 
$hits=array(); 
for ($a=0; $a<count($source); $a++) 
{ 
    $found=true; 
    for ($b=0; $b<count($search); $b++) 
     if ($source[$a+$b]!=$search[$b]) 
     { 
      $found=false; 
      break; 
     } 
    if ($found) $hits[]=$a; 
} 

// Create a list of matching dates 
$result=array(); 
foreach ($hits as $hit) $result[]=$dates[$hit]; 
print_r($result); 
+0

8秒鐘前:) – Sebb

+0

嘿@Wolfgang我得到一個未定義的偏移錯誤,這行:if($ source [$ a + $ b]!= $ search [$ b]) –

0

我花了一段時間才能得到你的要求:)下面的代碼應該工作:

$r = array(); // result 
for($i = 0; $i < count($array1); $i++) { 
    $test = true; 
    for($k = 0; $k < count($array2); $k++) 
    { 
    if(!isset($array1[$i+$k]) || $array1[$i+$k] != $array2[$k]) { 
     $test = false; 
    } 
    } 
    if($test) 
    { 
    $r[] = $array3[$i]; 
    } 
} 

了Lg

+0

嘿@Sebb我得到未定義的偏移錯誤:if($ array1 [$ i + $ k]!= $ array2 [$ k])。認爲它可能是$ k。 –

+0

做了編輯,當$ i是最大值並且我添加了$ k ...;) – Sebb

0

可能是一個更快的方法,但這個工程:

$haystack = implode($array1); 
$needle = implode($array2); 
$key = -1; 

while(($key = strpos($haystack, $needle, $key+1)) !== false) { 
    if(isset($array3[$key])) { 
     $result[$key] = $array3[$key]; 
    } 
} 

你可以只使用$result[] = $array3[$key];,但我加$result[$key]讓你擁有記錄它被發現的地方。

DEMO

相關問題