将具有相同值的数组元素放入一个元素中并连接它们的键
Put array elements with the same value into one element and concatenate their keys
我正在尝试 merge/append 包含相同值的数组键。
我有一个这样的数组:
$array = array(
'12' => 'Coats',
'23' => 'Coats',
'45' => 'Brushs',
'5' => 'others',
'7' => 'None',
'8' => 'None',
'9' => 'None',
);
预期输出为:
$array = array(
'12,23' => 'Coats',
'45' => 'Brushs',
'5' => 'others',
'7,8,9' => 'None'
);
我的尝试:
$subFinalFinal = array();
foreach($array as $key => $val){
if($skey = array_search($val, $subFinalFinal)){ //duplicate value
$subFinalFinal[$key.','.$skey] = $val;
} else {
$subFinalFinal[$key] = $val;
}
}
但它没有给我预期的结果:
Array
(
[182] => Coats & Jackets
[211,182] => Coats & Jackets
[45] => Brushs
[5] => others
[7] => None
[7,8] => None
[7,9] => None
)
这应该适合你:
只需使用 foreach 循环遍历您通过 array_unique()
获得的所有唯一值。这里是这样的:
Array
(
[0] => Coats
[1] => Brushs
[2] => others
[3] => None
)
并获取所有键,这些键保存 array_keys()
的唯一值。本例中的意思是:
value | key(s)
--------------------------------------
Coats | Array (12, 23)
Brushs | Array (45)
others | Array (5)
None | Array (7, 8, 9)
然后您可以implode()
将您的键数组转换为字符串并将其用作键。
代码:
<?php
$array = array('12' => 'Coats', '23' => 'Coats', '45' => 'Brushs', '5' => 'others', '7' => 'None', '8' => 'None', '9' => 'None', );
$result = [];
foreach(array_unique($array) as $uniqueValue)
$result[implode(",", array_keys($array, $uniqueValue))] = $uniqueValue;
print_r($result);
?>
输出:
Array
(
[12,23] => Coats
[45] => Brushs
[5] => others
[7,8,9] => None
)
您可以将array_flip
用作
$res = array_flip($array);
foreach($res as $k =>$v) $res[$k] = implode(", ", array_keys($array, $k));
print_r(array_flip($res));
输出:
Array
(
[12,23] => Coats
[45] => Brushs
[5] => others
[7,8,9] => None
)
我正在尝试 merge/append 包含相同值的数组键。
我有一个这样的数组:
$array = array(
'12' => 'Coats',
'23' => 'Coats',
'45' => 'Brushs',
'5' => 'others',
'7' => 'None',
'8' => 'None',
'9' => 'None',
);
预期输出为:
$array = array(
'12,23' => 'Coats',
'45' => 'Brushs',
'5' => 'others',
'7,8,9' => 'None'
);
我的尝试:
$subFinalFinal = array();
foreach($array as $key => $val){
if($skey = array_search($val, $subFinalFinal)){ //duplicate value
$subFinalFinal[$key.','.$skey] = $val;
} else {
$subFinalFinal[$key] = $val;
}
}
但它没有给我预期的结果:
Array
(
[182] => Coats & Jackets
[211,182] => Coats & Jackets
[45] => Brushs
[5] => others
[7] => None
[7,8] => None
[7,9] => None
)
这应该适合你:
只需使用 foreach 循环遍历您通过 array_unique()
获得的所有唯一值。这里是这样的:
Array
(
[0] => Coats
[1] => Brushs
[2] => others
[3] => None
)
并获取所有键,这些键保存 array_keys()
的唯一值。本例中的意思是:
value | key(s)
--------------------------------------
Coats | Array (12, 23)
Brushs | Array (45)
others | Array (5)
None | Array (7, 8, 9)
然后您可以implode()
将您的键数组转换为字符串并将其用作键。
代码:
<?php
$array = array('12' => 'Coats', '23' => 'Coats', '45' => 'Brushs', '5' => 'others', '7' => 'None', '8' => 'None', '9' => 'None', );
$result = [];
foreach(array_unique($array) as $uniqueValue)
$result[implode(",", array_keys($array, $uniqueValue))] = $uniqueValue;
print_r($result);
?>
输出:
Array
(
[12,23] => Coats
[45] => Brushs
[5] => others
[7,8,9] => None
)
您可以将array_flip
用作
$res = array_flip($array);
foreach($res as $k =>$v) $res[$k] = implode(", ", array_keys($array, $k));
print_r(array_flip($res));
输出:
Array
(
[12,23] => Coats
[45] => Brushs
[5] => others
[7,8,9] => None
)