2014-05-08 153 views
1

我有一個字符串:a74b8c0d3845e7 ...等等等等PHP使preg_split字母數字混合串使字母鍵

的基本模式是一個字母后跟一個數字。

我想創建一個陣列,將導致:

Array (
[a] => 74 
[b] => 8 
[c] => 0 
[d] => 3845 
[e] => 7 
) 

我知道這將是一個foreach循環(或幾個),但似乎無法推測出來。

+0

我認爲你需要將字符串拆分爲單個字符並編譯,如果它手動.. – Eddie

+0

洛爾看起來像每個人都在爭取該複選標記。你在這裏有幾個工作算法......現在你必須選擇你最喜歡的:D –

回答

0

相反的preg_split,您可以使用preg_match_all把所有的字母和相應的數字。

preg_match_all('/([a-z])(\d+)/', $string, $match); 
$result = array(); 
foreach ($match[1] as $i => $letter) { 
    $result[$letter] = $match[2][$i]; 
} 
+0

有人因爲我沒有使用'preg_split'而使我失望了嗎? – Barmar

+0

經過測試和工作。 – Zyre

+0

+1爲所有使用單個變量。 –

0

你可以看看使用str_split將你的字符串拆分成可迭代的數組。下面是一個例子,我只是把在一起:

// Set the string value. 
$string = 'a74b8c0d3845e7'; 

// Create the string array using `str_split`. 
$string_array = str_split($string); 

// Init `$final_array`. 
$final_array = array(); 

// Roll throgh the `$string_array` using `foreach`. 
foreach ($string_array as $string_key => $string_value) { 
    // If the value `is_numeric` assign it as `$final_value`. 
    // Else set the `$final_key` & reset the `$final_value`. 
    if (is_numeric($string_value)) { 
    $final_value = $string_value; 
    } 
    else { 
    $final_key = $string_value; 
    $final_value = ''; 
    } 
    // Set the value in the `$final_array`. 
    $final_array[$final_key] .= $final_value; 
} 

// Dump the `$final_array` to show the concept works. 
echo '<pre>'; 
print_r($final_array); 
echo '</pre>'; 

輸出是:

Array 
(
    [a] => 74 
    [b] => 8 
    [c] => 0 
    [d] => 3845 
    [e] => 7 
) 
+0

'str_split'將它分成等長的塊。這對此有何幫助? – Barmar

+0

@Barmar給我一些時間來編碼解決方案,你會看到。 – JakeGould

+0

你只是迭代字符串中的字符。你不需要使用'str_split',只需要一個普通的'for'循環。 – Barmar

0

這應該做的伎倆:

$str = 'a74b8c0d3845e7'; 

$arr = preg_split('/[a-zA-Z]+/', $str, -1, PREG_SPLIT_NO_EMPTY); 
$no_num = preg_replace('/[0-9]/', '', $str); 

$new_arr = array(); 

foreach ($arr as $i=>$a) 
    $new_arr[$no_num[$i]] = $a; 

print_r($new_arr); 

結果:

Array 
(
    [a] => 74 
    [b] => 8 
    [c] => 0 
    [d] => 3845 
    [e] => 7 
) 
+0

經過測試和工作。 – Zyre

0
$str = "a74b8c0d3845e7"; 
$letters = preg_split("/[0-9]+/",$str); 
$nums = preg_split("/[a-z]+/", $str); 
array_shift($nums); 
array_pop($letters); 
print_r(array_combine($letters,$nums)); 

打印出

Array 
(
    [a] => 74 
    [b] => 8 
    [c] => 0 
    [d] => 3845 
    [e] => 7 
) 
+0

我試試這個,實際上沒有打印出來。 – Zyre

+0

http://ideone.com/OdjQCn – jh314

0

這應該工作您。它是如何工作的,它使2個數組。第一個數組由字母分開,形成一組數字。然後下一個數組被數字分割,形成一個字母數組。最後,這兩個數組被組合成一個新的數組,其中字母作爲其鍵,數字作爲其值!漂亮整潔...

$string = 'a74b8c0d3845e7'; 

    $array1 = preg_split("/[a-zA-Z]+/", $string); 
    $array2 = preg_split("/[0-9]+/", $string); 

    for($i = 1; $i <= count($array1); $i++) { 
     if(isset($array1[$i])){ 
      $newarray[$array2[$i-1]] = $array1[$i]; 
     } 
    } 

    var_dump($newarray); 
+0

經過測試和工作。 – Zyre

0
<?php 
$a = "a74b8c0d3845e7"; 
preg_match_all("/[\d]+/", $a, $numbers); 
preg_match_all("/[a-z]+/i", $a, $strings); 
$c=array_combine($strings[0],$numbers[0]); 
print_r($c); 

檢查它here

+0

我試試這個,實際上沒有打印出來。 – Zyre

+0

其工作檢查出來[這裏](http://3v4l.org/mQBLo)希望你正在使用PHP v5 + –

+0

對不起,我的錯誤。它正在工作。 – Zyre

相關問題