我想從一個字符串來得到這樣獲取陣列模式 - KEY1:VAL1,VAL2,..; KEY2:VAL1,
color:blue,red;size:s
於關聯多陣列
[
color => [blue,red],
size => [s]
]
我試過([a-z]+):([a-z^,]+)
但還不夠;我不知道如何遞歸它或什麼。
我想從一個字符串來得到這樣獲取陣列模式 - KEY1:VAL1,VAL2,..; KEY2:VAL1,
color:blue,red;size:s
於關聯多陣列
[
color => [blue,red],
size => [s]
]
我試過([a-z]+):([a-z^,]+)
但還不夠;我不知道如何遞歸它或什麼。
我不會使用像這樣的正則表達式。相反使用explode()幾次。
<?php
$str = 'color:blue,red;size:s';
$values = explode(';', $str);
$arr = [];
foreach($values as $val) {
$parts = explode(':', $val);
$arr[$parts[0]] = explode(',', $parts[1]);
}
輸出:
Array
(
[color] => Array
(
[0] => blue
[1] => red
)
[size] => Array
(
[0] => s
)
)
$dataText = 'color:blue,red;size:s';
$data = explode(';', $dataText);
$outputData = [];
foreach ($data as $item){
$itemData = explode(':', $item);
$outputData[$itemData[0]] = explode(',', $itemData[1]);
}
print_r('<pre>');
print_r($outputData);
print_r('</pre>');
用正則表達式是不是那麼簡單的像爆炸,但你可以試試這個...
$re = '/(\w+)\:([^;]+)/';
$str = 'color:blue,red;size:s';
preg_match_all($re, $str, $matches);
// Print the entire match result
$result = array();
$keys = array();
for($i = 1; $i < count($matches); $i++) {
foreach($matches[$i] as $k => $val){
if($i == 1) {
$result[$val] = array();
$keys[$k] = $val;
} else {
$result[$keys[$k]] = $val;
}
}
}
echo '<pre>';
print_r($result);
echo '</pre>';
結果
Array
(
[color] => blue,red
[size] => s
)
也許嘗試使用爆炸(';',$ data);它會給你一些對,所以你可以使用foreach或數組步行 – Maytyn
使用正則表達式,它[仍然沒有趣](https://ideone.com/HeQdPU),請使用下面的答案。 –
@WiktorStribiżew特別是如果您不知道密鑰的名稱。 – Mike