2017-01-28 3 views
2

Я не уверен, на самом деле имеют ни малейшего представления о регулярных выражениях ... Так что я застрял ... Может кто-нибудь дай мне решение с explaintation самого регулярного выражения ...REGEX PHP preg_split

Вот мой код:

$str = "id:521082299088|name:JOHNSON GREIG DENOIA|mounth:JAN17|amount:170027|admin:2500|billqty:1|metre:R1/900|usage:00010261-00010550|reffno:0BKP21851AF3EC2E0D4F56997EA19DFA|charge:170377|balace:1935"; 
$pregsplit = preg_split("/[\s|]+/",$string2); 

выход:

Array 
(
    [0] => id:521082299088 
    [1] => name:JOHNSON 
    [2] => GREIG 
    [3] => DENOIA 
    [4] => mounth:JAN17 
    [5] => amount:170027 
    [6] => admin:2500 
    [7] => billqty:1 
    [8] => metre:R1/900 
    [9] => usage:00010261-00010550 
    [10] => reffno:0BKP21851AF3EC2E0D4F56997EA19DFA 
    [11] => charge:170377 
    [12] => balance:1935 
) 

Я хочу, чтобы результат, как это,

Array 
(
    "id" => 521082299088 
    "name" => "JOHNSON GREIG DENOIA" 
    "mount" => "JAN17" 
    "amount" => 170027 
    "admin" => 2500 
    "billqty" => 1 
    "metre" => "R1/900" 
    "usage" => "00010261-00010550" 
    "reffno" => "0BKP21851AF3EC2E0D4F56997EA19DFA" 
    "charge" => 170377 
    "balance" => 1935 
) 

Извините за фиктивный вопрос ...

ответ

4

1) Решение с помощью функции preg_match_all с конкретным шаблоном регулярного выражения:

$str = "id:521082299088|name:JOHNSON GREIG DENOIA|mounth:JAN17|amount:170027|admin:2500|billqty:1|metre:R1/900|usage:00010261-00010550|reffno:0BKP21851AF3EC2E0D4F56997EA19DFA|charge:170377|balace:1935"; 

preg_match_all("/(\w+):([^|]+)/", $str, $matches, PREG_SET_ORDER); 
$result = []; 
foreach ($matches as $items) { 
    $result[$items[1]] = $items[2]; 
} 
// $items[1] contains a "parameter" name captured by the first capturing group (\w+) 
// $items[2] contains a "parameter" value captured by the second capturing group ([^|]+) 

print_r($result); 

Выход:

Array 
(
    [id] => 521082299088 
    [name] => JOHNSON GREIG DENOIA 
    [mounth] => JAN17 
    [amount] => 170027 
    [admin] => 2500 
    [billqty] => 1 
    [metre] => R1/900 
    [usage] => 00010261-00010550 
    [reffno] => 0BKP21851AF3EC2E0D4F56997EA19DFA 
    [charge] => 170377 
    [balace] => 1935 
) 

(\w+) - соответствует всем буквенно-цифровые символы, а затем :

([^|]+) - соответствует всем символам кроме |, который является разделителем

http://php.net/manual/en/function.preg-match-all.php


2) В дополнение к первому подходу - с использованием array_combine функции (чтобы объединить все соответствующие значения из двух захватывающих групп) :

preg_match_all("/(\w+):([^|]+)/", $str, $matches); 
$result = array_combine($matches[1], $matches[2]); 
// will give the same result 

3) Третий альтернативный подход будет использовать explode() функцию:

$result = []; 
foreach (explode("|", $str) as $items) { 
    $pair = explode(":", $items); 
    $result[$pair[0]] = $pair[1]; 
} 
+0

Thankyouuuuu, помогает мне много. –

+0

Можете ли вы объяснить мне, что регулярное выражение? для каждого персонажа –

+0

@KurniawanNanda, добро пожаловать – RomanPerekhrest

0

Этот подход был бы альтернативой.

Вы можете выделить строку и создать массив из нее с помощью функции PHP explode(). Затем вы можете отделить структуру 'key:value', используя функции strpos() и substr().

// input string 
$str = "id:521082299088|name:JOHNSON GREIG DENOIA|mounth:JAN17|amount:170027|admin:2500|billqty:1|metre:R1/900|usage:00010261-00010550|reffno:0BKP21851AF3EC2E0D4F56997EA19DFA|charge:170377|balace:1935"; 

// make an array out of the string, split elements on each pipe character ('|') 
$arr = explode('|', $str); 

// create an output array to keep the results 
$output = []; 

// process the array 
foreach ($arr as $item) { 
    // get delimiter 
    $separatorPos = strpos($item, ':'); 
    // take the key part (The part before the ':') 
    $key = substr($item, 0, $separatorPos); 
    // take the value part (The part after the ':') 
    $value = substr($item, $separatorPos); 
    // push it into the output array 
    $output[$key] = $value; 
} 

// dump the output array 
var_export($output); 

Дамп выходного массива будет похож на follwing;

[ 
    'id'  => ':521082299088', 
    'name' => ':JOHNSON GREIG DENOIA', 
    'mounth' => ':JAN17', 
    'amount' => ':170027', 
    'admin' => ':2500', 
    'billqty' => ':1', 
    'metre' => ':R1/900', 
    'usage' => ':00010261-00010550', 
    'reffno' => ':0BKP21851AF3EC2E0D4F56997EA19DFA', 
    'charge' => ':170377', 
    'balace' => ':1935', 
] 
2

Если вы не в состоянии написать регулярное expression.Here простое решение с использованием explode() method.The explode() функция разбивает строку в массив.

<?php 
$str = "id:521082299088|name:JOHNSON GREIG DENOIA|mounth:JAN17|amount:170027|admin:2500|billqty:1|metre:R1/900|usage:00010261-00010550|reffno:0BKP21851AF3EC2E0D4F56997EA19DFA|charge:170377|balace:1935"; 

$array = explode('|',$str); 
foreach($array as $key=>$value){ 
$data = explode(':',$value); 
$final[$data[0]] = $data[1]; 

} 
print_r($final); 

?> 

Выход:

Array 
(
    [id] => 521082299088 
    [name] => JOHNSON GREIG DENOIA 
    [mounth] => JAN17 
    [amount] => 170027 
    [admin] => 2500 
    [billqty] => 1 
    [metre] => R1/900 
    [usage] => 00010261-00010550 
    [reffno] => 0BKP21851AF3EC2E0D4F56997EA19DFA 
    [charge] => 170377 
    [balace] => 1935 
) 

Чтобы узнать больше о explode() чтения документации http://php.net/manual/en/function.explode.php

+0

Спасибо за советы, но мои учителя сказали мне изучить регулярное выражение ... Я тоже могу использовать взрыв ... –

+0

oho тогда, не узнав, что вы публикуете здесь. , –

1

Смешной способ (только если строка не содержит = или &): перевести трубы на амперсанды и двоеточия равными знаками, затем проанализировать его как URL-запрос с помощью parse_str:

$str = "id:521082299088|name:JOHNSON GREIG DENOIA|mounth:JAN17|amount:170027|admin:2500|billqty:1|metre:R1/900|usage:00010261-00010550|reffno:0BKP21851AF3EC2E0D4F56997EA19DFA|charge:170377|balace:1935"; 

parse_str(strtr($str, ':|', '=&'), $result); 

print_r($result); 

demo

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