繁体   English   中英

PHP 多维数组转换为唯一的多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM