1

這裏主要頭痛,我很累,遍歷鍵和值,並操縱指針,以比較數組鍵中的整數。我試圖根據數組鍵的大於1的減法來拆分和排列這個數組,我很早就注意到這是一個有效的方法來將這些值分成簇,正如在這個問題的底部所解釋的那樣。php遍歷鍵和值,並分裂成基於數組鍵的子數組整數差異

例如:([0] =>貓[2] =>果[3] =>蘋果)鍵等同於:

第二 - 第一鍵:2-0 = (2> 1 )

3 - 第二鍵:3-2 = 1(1 = 1)

我給的什麼,我想在這個問題的底部來完成一個簡明的解釋。

陣列下面的代碼:

$arr1 = array("cat", "Van", "fruit", "apple", "orange", "banana", "car", "car", "boat", "Bike", "truck", "cat", "dog", "bus", "van", "truck", "Sea", "ocean", "sea", "ship", "train", "Land"); 
$arr2 = array("cat", "fruit", "apple", "orange", "banana", "cat", "dog", "sea", "ocean", "land"); 
$array = array_uintersect($arr1, $arr2, 'strcasecmp'); 

//returns: 

Array 
(
    [0] => cat 
    [2] => fruit 
    [3] => apple 
    [4] => orange 
    [5] => banana 
    [11] => cat 
    [12] => dog 
    [16] => Sea 
    [17] => ocean 
    [18] => sea 
    [21] => Land 
) 

(下圖)是代碼中,我至今寫爲我試圖實現在這個問題的底部單獨作爲解釋:

$arr1 = array("cat", "Van", "fruit", "apple", "orange", "banana", "car", "car", "boat", "Bike", "truck", "cat", "dog", "bus", "van", "truck", "Sea", "ocean", "sea", "ship", "train", "Land"); 
$arr2 = array("cat", "fruit", "apple", "orange", "banana", "cat", "dog", "sea", "ocean", "land"); 
foreach($array as &$val){ 
$array2 = $array; 
prev($array); 
if(key($array2)-key($array)!==1) { //bool to determine if the difference in keys is only 1 integer apart. 
$val = array($val); 
$val[] = ""; 
}} 
unset($val); 
print_r(collapse_multi_arrays($array)); //collapse_multi_arrays is a custom function I have to form a single array from multidimensional ones. 

outputs: 
Array 
(
    [0] => cat 
    [1] => 
    [2] => fruit 
    [3] => apple 
    [4] => orange 
    [5] => banana 
    [6] => 
    [7] => cat 
    [8] => dog 
    [9] => 
    [10] => Sea 
    [11] => ocean 
    [12] => sea 
    [13] => 
    [14] => Land 
    [15] => 
) 

(輸出上面)不知道它是否是迭代數組的最明智的方式,但我想使用空值來分塊或以某種方式分割以獲得如下所示的結果:

Array 
(
    [0] => Array 
     (
      [0] => cat 
     ) 

    [1] => Array 
     (
      [2] => fruit 
      [3] => apple 
      [4] => orange 
      [5] => banana 
     ) 

    [2] => Array 
     (
      [11] => cat 
      [12] => dog 
     ) 

    [3] => Array 
     (
      [16] => Sea 
      [17] => ocean 
      [18] => sea 
     ) 

    [4] => Array 
     (
      [21] => Land 
     ) 

) 

其中我想可以附加到每個簇到一個值的每個 這樣的:

Array 
(
    [0] => cat 
    [1] => fruit apple orange banana 
    [2] => cat dog 
    [3] => Sea ocean sea 
    [4] => Land 

) 

// ===================== ===================================

整體說明: 我正在嘗試做什麼整體是一樣的東西,

從這個:

Array 
(
    [0] => cat 
    [2] => fruit 
    [3] => apple 
    [4] => orange 
    [5] => banana 
    [11] => cat 
    [12] => dog 
    [16] => Sea 
    [17] => ocean 
    [18] => sea 
    [21] => Land 
) 

這樣:

Array 
(
    [0] => cat 
    [1] => fruit apple orange banana 
    [2] => cat dog 
    [3] => Sea ocean sea 
    [4] => Land 

) 

這是數組值羣集的附加在一起時在陣列密鑰的差是相距僅1的整數。 如果在陣列密鑰整數的差大於1,則簇所附數組值被傳遞到下一個陣列的鍵, 如從這個 *實施例

任何幫助高於此*鍵值,建議,代碼將非常感謝,因爲我發現很難遍歷鍵和值來實現這個目標,歡呼。

回答

0

什麼跳到我的腦海裏是這樣(測試和生產想要的結果)一個簡單的解決方案:

$a = array(
    0 => 'cat', 
    2 => 'fruit', 
    3 => 'apple', 
    4 => 'orange', 
    5 => 'banana', 
    11 => 'cat', 
    12 => 'dog', 
    16 => 'Sea', 
    17 => 'ocean', 
    18 => 'sea', 
    21 => 'Land', 
); 

$last = 0; 
$stack = $grouped = array(); 
foreach ($a as $key => $val) { 
    if ($key - $last > 1) { 
     $grouped[] = implode(' ', $stack); 
     $stack = array(); 
    } 
    $stack[] = $val; 
    $last = $key; 
} 
$grouped[] = implode(' ', $stack); 
print_r($grouped); 

我不知道你正試圖在這裏實現什麼,雖然它看起來有點奇怪;)無論你想要解決什麼潛在的問題,我會認爲這是一個比這更優雅的解決方案。

+0

+1簡單優雅的解決方案! :)你剛剛救了我很多,因爲我從來沒有解決過任何類似的問題。該腳本用於文本處理,從列表中查找關鍵字並進一步處理。 – bobywww 2012-04-28 04:23:13