我正在接收的数据是元素数组,其中包含像这样的语言所组成的标签数组
[
{
"1": "tag_es1;tag_es2;tag_es3",
"2": "tag_en1;tag_en2;tag_en3"
},
{
"1": "tag_es1;tag_es2",
"2": "tag_en1;tag_en2"
}
]
我需要按语言将每个tag
分开,所以我使用array_map
来进行这样的转换
[
{
"1": [
"tag_es1",
"tag_es2",
"tag_es3"
],
"2": [
"tag_en1",
"tag_en2",
"tag_en3"
]
},
{
"1": [
"tag_es1",
"tag_es2"
],
"2": [
"tag_en1",
"tag_en2"
]
}
]
我需要的是这样的回应
[
{
{
"1" : "tag_es1",
"2" : "tag_en1"
},
{
"1" : "tag_es2",
"2" : "tag_en2"
},
{
"1" : "tag_es3",
"2" : "tag_en3"
}
},
{
{
"1" : "tag_es4",
"2" : "tag_en4"
},
{
"1" : "tag_es5",
"2" : "tag_en5"
}
}
]
我尝试使用array_combine
,array_walk
,并在array_map
内手动进行操作,但是没有成功,我该怎么办?
答案 0 :(得分:1)
具有特殊技巧的解决方案,其中null
作为array_map
的回调:
$arr = json_decode($s, true);
$new_arr = [];
foreach ($arr as $item) {
$parts1 = explode(';', $item[1]);
$parts2 = explode(';', $item[2]);
// $new_arr[] = array_map(null, $parts1, $parts2);
$tmp_arr = array_map(null, $parts1, $parts2);
$new_arr[] = array_map(
function($v) { return array_combine(["1","2"], $v); },
$tmp_arr
);
}
答案 1 :(得分:0)
您可以循环数组并构建一个临时数组。
然后可以循环使用此数组,并使用array_column来将相应的值获取到新数组。
$arr = json_decode($json, true);
foreach($arr as $key1 => $sub){
foreach($sub as $item){
$temp[] = explode(";", $item);
}
foreach($temp[0] as $key2 => $val){
$new[$key1][]= array_combine([1,2],array_column($temp, $key2));
}
$temp =[]; // empty array
}
var_dump($new);
输出:
array(2) {
[0]=>
array(3) {
[0]=>
array(2) {
[1]=>
string(7) "tag_es1"
[2]=>
string(7) "tag_en1"
}
[1]=>
array(2) {
[1]=>
string(7) "tag_es2"
[2]=>
string(7) "tag_en2"
}
[2]=>
array(2) {
[1]=>
string(7) "tag_es3"
[2]=>
string(7) "tag_en3"
}
}
[1]=>
array(2) {
[0]=>
array(2) {
[1]=>
string(7) "tag_es1"
[2]=>
string(7) "tag_en1"
}
[1]=>
array(2) {
[1]=>
string(7) "tag_es2"
[2]=>
string(7) "tag_en2"
}
}
}
添加了“ 1”,“ 2”作为键