在php中将数组值合并为单个键和多个值
我希望数组合并成一个键值对。看看下面的例子 这是我的代码和数组$aExtraFilter在php中将数组值合并为单个键和多个值,php,arrays,Php,Arrays,我希望数组合并成一个键值对。看看下面的例子 这是我的代码和数组$aExtraFilter array (size=4) 0 => array (size=2) 'key' => string 'CookTech' (length=8) 'value' => string 'Broil' (length=5) 1 => array (size=2) 'key' => string 'CookTech' (
array (size=4)
0 =>
array (size=2)
'key' => string 'CookTech' (length=8)
'value' => string 'Broil' (length=5)
1 =>
array (size=2)
'key' => string 'CookTech' (length=8)
'value' => string 'Pan Fry' (length=7)
2 =>
array (size=2)
'key' => string 'CookSkills' (length=10)
'value' => string 'Intro' (length=5)
3 =>
array (size=2)
'key' => string 'CookSkills' (length=10)
'value' => string 'Knife Skills' (length=12)
这是我的密码:
$aExtraFilter2 = [];
$extrafilterkey = '';
$extrafiltervalue = [];
foreach ($aExtraFilter as $key => $value) {
$extrafilterkey = $value['key'];
$aExtraFilter2[$extrafilterkey] = [];
array_push($extrafiltervalue, $value['value']);
$aExtraFilter2[$extrafilterkey] = implode(',', $extrafiltervalue);
}
var_dump($aExtraFilter2);
输出为:
array (size=2)
'CookTech' => string 'Broil,Pan Fry' (length=13)
'CookSkills' => string 'Broil,Pan Fry,Intro,Knife Skills' (length=32)
我希望它看起来像这样:
array (size=2)
'CookTech' => string 'Broil,Pan Fry' (length=13)
'CookSkills' => string 'Intro,Knife Skills' (length=32)
我想我就快到了,但我想我需要一些帮助。这一行没有任何作用,因为它只是在稍后被替换,因为设置了相同的变量:
$aExtraFilter2[$extrafilterkey] = [];
无论您拥有什么,$value['key']
,这一行都会附加到数组中,这就是为什么您在输出中将所有键集中在一起的原因:
array_push($extrafiltervalue, $value['value']);
这将产生所需的输出:
// fill array of arrays
$aExtraFilter2 = [];
foreach ($aExtraFilter as $key => $value) {
if (!array_key_exists($value['key'], $aExtraFilter2)) $aExtraFilter2[$value['key']] = [];
$aExtraFilter2[$value['key']][] = $value['value'];
}
// convert to string (if needed at all, depends on what you're doing later)
foreach ($aExtraFilter2 as $key => $set) {
$aExtraFilter2[$key] = join(',', $set);
}
对此进行编码的典型方法是基于键创建一个临时结构,并包含一个包含以下值的数组:
$tmp = [];
foreach ($aExtraFilter as $pair) {
$tmp[$pair['key']][] = $pair['value'];
}
之后,结构将如下所示:
[
'CookTech' => ['Broil', 'Pan Fry'],
'CookSkills' => ['Intro', 'Knife Skills'],
]
然后,将该数组映射到您想要的表示形式:
$aExtraFilter2 = array_map(function($values) {
return join(',', $values);
}, $tmp);
另见: