我有这种数组
array(1) {
["key,language,text"] => "home,es,casa"
}
是否可以解析它并将其拆分为
array(3) {
['key'] => "home" ,
['language'] => "es" ,
['text'] => "casa"
}
我的实际解决方案是执行以下操作,但我很确定我能找到更好的方法
$test = explode(',', $my_array['key,language,text']);
$my_array['key'] = $test[0];
$my_array['language'] = $test[1];
$my_array['text'] = $test[2];
答案 0 :(得分:1)
您可以使用array_combine从键和值数组创建数组,假设每个数组的长度相等,如果不匹配则返回false。
foreach($array as $keys_str => $values_str) {
$keys = explode(",", $keys_str);
$values = explode(",", $values_str);
$kv_array = array_combine($keys, $values);
}
$kv_array
将采用您之后的格式。
答案 1 :(得分:0)
这是您的最佳解决方案:
//this your problem
$array = [
"key,language,text" => "home,es,casa",
"key,language,text" => "home1,es1,casa1"
];
$colms_tmp = 0;
//this your solution, foreach all
foreach($array as $key => $val){
//split your value
$values = explode(",",$val);
//foreach the key (WITH COLMNS), $colm is number of key after explode
foreach(explode(",",$key) as $colm => $the_key){
$result[$colms_tmp][$the_key] = $values[$colm];
}
$colms_tmp++;
}
我没有尝试过,但我认为这可以帮助你。
答案 2 :(得分:0)
试一试..
$arr = array("key,language,text" => "home,es,casa");
$val = explode(",", $arr[key($arr)]);
foreach(explode(",", key($arr)) as $k => $key){
$data[$key] = $val[$k];
}
答案 3 :(得分:0)
如果您的阵列只有一个条目:
$a = ["key,language,text" => "home,es,casa"];
你可以使用reset来返回第一个数组元素的值,key将返回内部指针当前指向的数组元素的键。
然后使用explode并使用逗号作为分隔符,并使用array_combine使用爆炸的数组来创建键和值来创建结果。
$result = array_combine(explode(',', key($a)), explode(',', reset($a)));
print_r($result);
那会给你:
array(3) {
["key"]=>
string(4) "home"
["language"]=>
string(2) "es"
["text"]=>
string(4) "casa"
}