PHP:在数组中解析和拆分键和值

时间:2018-04-27 12:15:13

标签: php arrays

我有这种数组

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];

4 个答案:

答案 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"
}