[英]How to find a specific word in a string and add a character before the string in php?
[英]How to find specific character to create array from string using php
我有一些像下面這樣的字符串:
'STRIPLED 9.6W 24V 2.7K 120LED IP20 1CM',
'STRIPLED 9.6W 24V 3K 120LED IP20 1CM',
'STRIPLED H 6 W 24V 4K 140 LED IP20 1CM',
'STRIPLED HO 12.3 W 24V 3K 128 LED IP65 1CM',
'STRIPLED HO 20W 24V 2.7K 280 LED IP65 1CM',
'STRIPLED 14.4W 24V 2.7K 180 LED IP65 1 CM',
我試圖找到一些字符並創建像
預期結果:
Array
(
[0] => Array
(
[power] => 9.6W 24V
[temp] => 2.7
[degrees] => IP20
)
[1] => Array
(
[power] => 9.6W 24V
[temp] => 3
[degrees] => IP20
)
[2] => Array
(
[power] => HO 12.3 W 24V
[temp] => 3
[degrees] => IP65
)
)
但我無法找到正確的解決方案。
說明:條紋9.6W 24V 2.7K 120LED IP20 1CM
這里,W&V表示功率,K表示溫度,IP表示度
我試過的代碼:
<?php
$descriptions = [
'STRIPLED 9.6W 24V 2.7K 120LED IP20 1CM',
'STRIPLED 9.6W 24V 3K 120LED IP20 1CM',
'STRIPLED H 6 W 24V 4K 140 LED IP20 1CM',
'STRIPLED HO 12.3 W 24V 3K 128 LED IP65 1CM',
'STRIPLED HO 20W 24V 2.7K 280 LED IP65 1CM',
'STRIPLED 14.4W 24V 2.7K 180 LED IP65 1 CM',
];
$desc = [];
foreach($descriptions as $key=>$val){
$desc[$key]['power'] = strstr($val, 'V', true);
$desc[$key]['temp'] = strstr($val, 'K', true);
$desc[$key]['degrees'] = strstr($val, 'IP', true);
}
echo "<pre>";
print_r($desc).exit;
?>
我看到這樣的輸出:
Array
(
[0] => Array
(
[power] => STRIPLED 9,6W 24
[temp] => STRIPLED 9,6W 24V 2,7
[degrees] => STR
)
[1] => Array
(
[power] => STRIPLED 9,6W 24
[temp] => STRIPLED 9,6W 24V 3
[degrees] => STR
)
[2] => Array
(
[power] => STRIPLED H 6 W 24
[temp] => STRIPLED H 6 W 24V 4
[degrees] => STR
)
[3] => Array
(
[power] => STRIPLED HO 12,3 W 24
[temp] => STRIPLED HO 12,3 W 24V 3
[degrees] => STR
)
[4] => Array
(
[power] => STRIPLED HO 20W 24
[temp] => STRIPLED HO 20W 24V 2,7
[degrees] => STR
)
[5] => Array
(
[power] => STRIPLED 14,4W 24
[temp] => STRIPLED 14,4W 24V 2,7
[degrees] => STR
)
)
誰能給我一個解決方案,以達到預期的效果。
謝謝
我認為使用preg_match
可能是提取所需數據的最簡單方法。 根據您的樣本數據,此正則表達式應該起作用:
^\w+\s+([^V]+V)\s+([\d.,]+)K.*?(IP\d+)
這會查找一個單詞,然后是一定數量的非V
字符(“電源”部分),然后是K
之前的數字(“溫度”部分),最后是一個與IP
匹配的字符串,后跟一些數字( “學位”部分)。 您可以使用以下代碼(使用array_map
來處理數組):
$descriptions = [
'STRIPLED 9.6W 24V 2.7K 120LED IP20 1CM',
'STRIPLED 9.6W 24V 3K 120LED IP20 1CM',
'STRIPLED H 6 W 24V 4K 140 LED IP20 1CM',
'STRIPLED HO 12.3 W 24V 3K 128 LED IP65 1CM',
'STRIPLED HO 20W 24V 2.7K 280 LED IP65 1CM',
'STRIPLED 14.4W 24V 2.7K 180 LED IP65 1 CM',
];
$desc = array_map(function ($v) {
preg_match('/^\w+\s+([^V]+V)\s+([\d.,]+)K.*?(IP\d+)/', $v, $m);
array_shift($m);
return $m; }, $descriptions);
print_r($desc);
輸出樣本數據:
Array
(
[0] => Array
(
[0] => 9.6W 24V
[1] => 2.7
[2] => IP20
)
[1] => Array
(
[0] => 9.6W 24V
[1] => 3
[2] => IP20
)
[2] => Array
(
[0] => H 6 W 24V
[1] => 4
[2] => IP20
)
[3] => Array
(
[0] => HO 12.3 W 24V
[1] => 3
[2] => IP65
)
[4] => Array
(
[0] => HO 20W 24V
[1] => 2.7
[2] => IP65
)
[5] => Array
(
[0] => 14.4W 24V
[1] => 2.7
[2] => IP65
)
)
您也可以嘗試以下操作:
<?php
$arrays = [
'STRIPLED 9.6W 24V 2.7K 120LED IP20 1CM',
'STRIPLED 9.6W 24V 3K 120LED IP20 1CM',
'STRIPLED H 6 W 24V 4K 140 LED IP20 1CM',
'STRIPLED HO 12.3 W 24V 3K 128 LED IP65 1CM',
'STRIPLED HO 20W 24V 2.7K 280 LED IP65 1CM',
'STRIPLED 14.4W 24V 2.7K 180 LED IP65 1 CM'
];
foreach ($arrays as $array){
//remove STRIPLED
$result = [];
$removedStripled = str_replace('STRIPLED ', "", $array);
$arr = strtok($removedStripled, 'V');
$result['power'] = $arr.'V';
$temp = str_replace($arr.'V', "", $removedStripled);
$arr = strtok($temp, 'K');
$result['temp'] = $arr;
preg_match("/IP.*[0-9\s]/", $removedStripled, $match);
$degrees = explode(' ', $match[0]);
$result['degress'] = $degrees[0];
echo "<pre>";
print_r($result);
echo "</pre>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.