转换数组,使用父键php设置每个数组元素
我接收的数据是一个元素数组,它包含一个标记数组,按如下语言排列转换数组,使用父键php设置每个数组元素,php,arrays,Php,Arrays,我接收的数据是一个元素数组,它包含一个标记数组,按如下语言排列 [ { "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", "tag_es2", "tag_es3"
[
{
"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",
"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\u 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",
"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"
}
}
]
但我需要的是这样的回应
[
{
"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",
"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\u combine
,array\u walk
,并在array\u map
中手动执行,但没有成功,我能做什么?您可以循环数组并构建临时数组。然后可以循环此数组并使用array_column on获取新数组的相应值
$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”作为键解决方案,并使用
null
作为array\u 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
);
}
想解释一下吗?正如我所看到的,这完全符合op的预期。睡眠:)它们是“语言”键,我在另一个函数中使用它们来保存它们。更新了我的答案。
array\u combine(array\u keys($item),…
@u\u mulder你能提供一个链接或其他信息来精确说明“技巧”的作用吗?