2015-01-05 2 views
1

я с буквенно-цифровой строкойкак разделить буквенно-цифровую строку в массив

t14u1e7f8h15j4m3n50o65r22q29 

Я хотел бы преобразовать эту строку в массив, в целях экономии места я намеренно сделал это таким образом., Теперь этот вопрос я столкнулся прямо сейчас, что для того, чтобы tranform в массив с помощью PHP, порядок быть как

data: [14, 1, 7, 8, ..] 

categories : [t,u,e,f,h,j,m,n,o] 

также возможность дальнейшего преобразования категории в:

categories : [20:00,21:00,5:00,f,h,j,m,n,o] 

where a => 1:00 
     b => 2:00 

также, так как порядок, как T, U, E, F, H, J можно ли расположить их в алфавитном порядке максимум 10 символов, т.е. categories [a,b,c,d,e,f,g,i,j,k] что составляет 10 часов от текущего времени ..

+2

Поделитесь своими впечатлениями. –

+0

Для вашего первого шага используйте ['preg_split'] (http://php.net/manual/en/function.preg-split.php). Также не знаю, как вы экономить место здесь. Придумывая этот нестандартный формат данных, вы создаете накладные расходы на вычисления. – sjagr

ответ

2

Это должно работать для вас:

(я предполагаю, что вы используете только строчные буквы)

<?php 

    $string = "t14u1e7f8h15j4m3n50o65r22q29"; 
    $result = array("data" => array(), "categories" => array(), "categories" => array()); 


    preg_match_all("/\d+/", $string, $matches); 
    $result["data"] = $matches[0]; 
    preg_match_all("/[^\d+]/", $string, $matches); 
    $result["categories"] = $matches[0]; 

    foreach($result["categories"] as $v) { 
     $result["categories2"][] = ord(strtolower($v))-96; 
    } 

    print_r($result); 

?> 

Выход:

Array 
(
    [data] => Array 
     (
      [0] => 14 
      [1] => 1 
      [2] => 7 
      [3] => 8 
      [4] => 15 
      [5] => 4 
      [6] => 3 
      [7] => 50 
      [8] => 65 
      [9] => 22 
      [10] => 29 
     ) 

    [categories] => Array 
     (
      [0] => t 
      [1] => u 
      [2] => e 
      [3] => f 
      [4] => h 
      [5] => j 
      [6] => m 
      [7] => n 
      [8] => o 
      [9] => r 
      [10] => q 
     ) 

    [categories2] => Array 
     (
      [0] => 20 
      [1] => 21 
      [2] => 5 
      [3] => 6 
      [4] => 8 
      [5] => 10 
      [6] => 13 
      [7] => 14 
      [8] => 15 
      [9] => 18 
      [10] => 17 
     ) 

) 
+0

Я думаю, что вопрос предпочел бы закончить с помощью array_combine ($ result ['categories'], $ result ['data']); для получения одного массива с категориями в качестве ключей и данных в качестве значений. – kainaw

+0

@kainaw OP должен сказать это, но я не вижу, что в вопросе и в последней части я не получаю ничего – Rizier123

Смежные вопросы