我有一系列看起来像这样的元素:
$lang = array(
[0] => lang.language = "Language";
[1] => lang.update = "Update";
[2] => lang.lblbasket = "Basket";
);
我试图将其转换为:
$lang = array(
[language] => Language,
[update] => Update,
[lblbasket] => Basket
);
我已经成功地做到了这一点,但我希望有一种更好的方法,我知道我可以通过正则表达式实现它,但不太确定如何做到这一点
这就是我设法做到的方式
for($i=0; $i<count($dumpArray); $i++) {
if (substr($dumpArray[$i], 0, 5 ) == 'lang.') {
list($lang_label, $lang_value) = explode('=', $dumpArray[$i]);
$language[substr(trim($lang_label), 5)] = trim(str_replace('"', '', $lang_value));
}
}
虽然我应该添加一个额外的函数来从字符串的末尾删除半列。 我希望有人可以提供帮助。
谢谢, Alesandro
答案 0 :(得分:1)
$arr = [
'lang.language = "Language";',
'lang.update = "Update";',
'lang.lblbasket = "Basket";',
];
foreach ($arr as $v) {
preg_match('/^.*?\.(.*?) = "(.*?)";$/', $v, $matches);
$arr2[$matches[1]] = $matches[2];
}
print_r($arr2);
正则表达式的解释如下:https://regex101.com/r/sp9dpC/2
答案 1 :(得分:0)
如果使用捕获组,正则表达式解决方案将非常简单:
$lang = [];
$regex = '/^lang\.(\S+)\s*=\s*"([^"]*)";$/';
foreach ($dumparray as $str) {
if (preg_match($regex, $str, $match) === 1) {
$lang[match[1]] = match[2];
}
}
答案 2 :(得分:0)
您可以更改以下行:
$language[substr(trim($lang_label), 5)] = trim(str_replace('"', '', $lang_value));
到此:
$lang_value = trim(str_replace('"', '', $lang_value);
$language[trim($lang_label)] = substr($lang_value, 0, strlen($lang_value)-1);
或
$language[substr(trim($lang_label), 5)] = trim(str_replace(array('"', ';'), '', $lang_value));
答案 3 :(得分:-1)
只需使用explode并构建一个新数组
$lang = array(
'lang.language' => "Language",
'lang.update' => "Update",
'lang.lblbasket' => "Basket",
);
foreach ($lang as $key =>$language)
{
$split_lang = explode('.',$key);
$final[$split_lang[1]] = $language ;
}
echo '<pre>';
print_r($final);
结果
Array
(
[language] => Language
[update] => Update
[lblbasket] => Basket
)