2009-10-28 37 views
0

我遇到以下問題。我有數字1/2/3/4/5/6,我想將它們分成兩組1/3/5和2/4/6。選擇必須根據職位進行。這部分工作正常。當我使用implode函數時,我想再次對它們進行分組時會出現問題;它只會看到存儲的最後一個數字。我知道它是與我使用這個標誌的(我選擇了這條路,因爲數字來分類的變化量每次):使用implode分組來自while while循環中的信息

$q++; 
$row0 = $row0 + 2; 
$row1 = $row1 + 2; 

,但我找不出辦法解決,或另一種方式得到相同的結果。希望有人能在這裏指出我的正確方向。我在下面留下了完整的代碼。


<? 
$string = "1/2/3/4/5/6"; 
$splitted = explode("/",$string); 
$cnt = count($splitted); 
$q=0; 
$row0=0; 
$row1=1; 
while($cnt > 2*$q) 
{ 
    $p_row = implode(array($splitted[$row0])); 
    echo "$p_row <br>"; 
    $i_row = implode(array($splitted[$row1])); 
    echo "$i_row <br>"; 

    $q++; 
    $row0 = $row0 + 2; 
    $row1 = $row1 + 2; 
} 
$out = "implode(',', $i_row)"; 
var_dump($out); 
?> 

回答

0

您可以分割陣列插入循環索引使用%基團。將每個組放在單獨的數組中。這裏是例子:

<?php 
    $string = "1/2/3/4/5/6"; 
    $splitted = explode("/",$string); 
    $group_odd = array(); ## all odd elements of $splitted come here 
    $group_even = array(); ## all even elements of $splitted come here 
    for ($index = 0; $index < count($splitted); ++$index) { 
     ## if number is divided by 2 with rest then it's odd 
     ## but we've started calculation from 0, so we need to add 1 
     if (($index+1) % 2) { 
      $group_odd[] = $splitted[$index]; 
     } 
     else { 
      $group_even[] = $splitted[$index]; 
     } 
    } 
    echo implode('/', $group_odd), "<br />"; ## outputs "1/3/5<br />" 
    echo implode('/', $group_even), "<br />"; ## outputs "2/4/6<br />" 
    print_r($group_odd); 
    print_r($group_even); 
?> 
+0

我剛剛檢查了您的提示,它很好地工作。一直在努力爲我們解決它,並找不到方法。非常感謝:-) – Nigg 2009-10-28 22:58:44

+0

索引計算可能非常複雜 – 2009-10-28 23:01:28

0

根據他們的位置?那麼,基於它們在數組中索引的均勻性/奇異性進行拆分?

這樣的事情?

<?php 

$string = "1/2/3/4/5/6"; 

list($evenKeys, $oddKeys) = array_split_custom(explode('/', $string)); 

echo '<pre>'; 
print_r($evenKeys); 
print_r($oddKeys); 

function array_split_custom(array $input) 
{ 
    $evens = array(); 
    $odds = array(); 
    foreach ($input as $index => $value) 
    { 
    if ($index & 1) 
    { 
     $odds[] = $value; 
    } else { 
     $evens[] = $value; 
    } 
    } 
    return array($evens, $odds); 
} 
1

我錯過了它似乎的問題。相反,我給這個優化。

$string = "1/2/3/4/5/6"; 
$splitted = explode("/", $string); 
$group = array(); 
for ($index = 0, $t = count($splitted); $index < $t; ++$index) { 
    $group[$index & 1][] = $splitted[$index]; 
} 
$oddIndex = $group[0]; //start with index 1 
$evenIndex = $group[1]; //start with index 2 

echo "odd index: " 
    . implode('/', $oddIndex) 
    . "\neven index: " 
    . implode('/', $evenIndex) 
    . "\n"; 
+1

我能想到的唯一的事情就是他希望在數組索引上做它,而不是數組值。 – Zak 2009-10-28 23:15:06