[英]PHP Multidimensional array conversion to unique multidimensional array
我需要一些 php 超级巨星来转换这个数组 :D 这是我当前的输出。
Array(
[0] => Array(
[name] => S, M, L
[id] => 168, 169, 170
)
[1] => Array(
[name] => M, L
[id] => 169, 170
)
[2] => Array(
[name] => S
[id] => 168
)
[3] => Array(
[name] => S, M
[id] => 168, 169
)
)
上面代码的期望输出。
Array(
[0] => Array(
[name] => S,
[id] => 168
)
[1] => Array(
[name] => M,
[id] => 169
)
[2] => Array(
[name] => L
[id] => 170
)
)
先谢谢了!
使用 PHP 7.3。
source of test7.php
<?php
$items = [
[
'name' => 'S , M, L',
'id' => '168,169,170',
],
[
'name' => 'M,L,XL',
'id' => '170,171,182',
],
];
$res = [];
foreach ($items as $itemOne) {
// check
if (!isset($itemOne['name']) && !isset($itemOne['id'])) {
continue;
}
$names = explode(',', $itemOne['name']);
$names = array_map('trim', $names);
$ids = explode(',', $itemOne['id']);
$ids = array_map('trim', $ids);
foreach ($names as $index => $name) {
// check
if (!isset($ids[$index])) {
continue;
}
// non uniq id
// $res[] = [
// uniq id, duplicate values will be overwritten
$res[$ids[$index]] = [
'name' => $name,
'id' => $ids[$index],
];
}
}
var_dump($res);
输出:
% php test7.php
array(5) {
[168]=>
array(2) {
["name"]=>
string(1) "S"
["id"]=>
string(3) "168"
}
[169]=>
array(2) {
["name"]=>
string(1) "M"
["id"]=>
string(3) "169"
}
[170]=>
array(2) {
["name"]=>
string(1) "M"
["id"]=>
string(3) "170"
}
[171]=>
array(2) {
["name"]=>
string(1) "L"
["id"]=>
string(3) "171"
}
[182]=>
array(2) {
["name"]=>
string(2) "XL"
["id"]=>
string(3) "182"
}
}
只需获取数组中的所有分解值,然后array_unique
将处理重复项。
$data = [
[
'name'=>'S, M, L',
'id' => '168, 169, 170'
],
[
'name'=>'M, L',
'id' => '169, 170'
],
[
'name'=>'S',
'id' => '168'
],
[
'name'=>'S, M',
'id' => '168, 169'
],
];
$result = [];
foreach ($data as $each ) {
$names = explode( ',', str_replace(' ','',$each['name']));
$ids = explode( ',', str_replace(' ', '', $each['id']) );
array_walk( $names , function ( $name, $key ) use ( $ids, &$result )
{
$result[] = [
'name' => $name,
'id' => $ids[ $key ]
];
});
}
$result = array_unique( $result, SORT_REGULAR );
var_dump( $result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.