PHP preg_split alpha数字混合字符串然后生成alpha键

时间:2014-05-08 02:43:58

标签: php

我有一个字符串:a74b8c0d3845e7 ...等等。

基本模式是一个字母,后跟一个数字。

我想创建一个导致:

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

我知道它会成为一个foreach循环(或几个),但似乎无法弄明白。

6 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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];
}

答案 2 :(得分: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
)

答案 3 :(得分: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
)

答案 4 :(得分: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);

答案 5 :(得分: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