我有一個字符串:a74b8c0d3845e7
...等等等等PHP使preg_split字母數字混合串使字母鍵
的基本模式是一個字母后跟一個數字。
我想創建一個陣列,將導致:
Array (
[a] => 74
[b] => 8
[c] => 0
[d] => 3845
[e] => 7
)
我知道這將是一個foreach循環(或幾個),但似乎無法推測出來。
我有一個字符串:a74b8c0d3845e7
...等等等等PHP使preg_split字母數字混合串使字母鍵
的基本模式是一個字母后跟一個數字。
我想創建一個陣列,將導致:
Array (
[a] => 74
[b] => 8
[c] => 0
[d] => 3845
[e] => 7
)
我知道這將是一個foreach循環(或幾個),但似乎無法推測出來。
你可以看看使用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
)
這應該做的伎倆:
$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
)
經過測試和工作。 – Zyre
$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
)
這應該工作您。它是如何工作的,它使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);
經過測試和工作。 – Zyre
我認爲你需要將字符串拆分爲單個字符並編譯,如果它手動.. – Eddie
洛爾看起來像每個人都在爭取該複選標記。你在這裏有幾個工作算法......現在你必須選擇你最喜歡的:D –