通过键

时间:2019-10-29 14:50:37

标签: php

请帮助我将四个数组组合为一个。

我必须比较主数组键,如果次数组的键重合,请将它们添加到新数组中。 我试图结合不同的php函数,但没有预期的结果,没有任何关系。

这是主数组。

[0] => Array
(
    [1] => "Category1"
    [2] => "Category2"
    [3] => "Category3"
    [4] => "Category4"
)

这些是次要数组

[1] => Array
(
    [1] "user_test_[1]" key 1 map to --> [1] Category1
    [2] "user_test_[2]" key 2 map to --> [2] Category2
    [3] "user_test_[3]" key 3 map to --> [3] Category3
    [4] "user_test_[4]" key 4 map to --> [4] Category4
)

[2] => Array
(
    2: "user_prod_[2]"  key 2 map to --> [2] Category2
    4: "user_prod_[4]"  key 4 map to --> [4] Category4
)

[3] => Array 
(
    [3] "user_uat_[3]"  key 3 map to --> [3] Category3
    [4] "user_uat_[4]"  key 4 map to --> [4] Category4
)

php格式的新数组结果:

$array_result = array(
        'Category1'=>array(
                    'user_test_[1]'
                ), 
        'Category2'=>array(
                    'user_test_[2]', 
                    'user_prod_[2]'
                ),
        'Category3'=>array(
                    'user_test_[3]', 
                    'user_uat_[3]'
                ),
        'Category4'=>array(
                    'user_test_[4]', 
                    'user_prod_[4]',
                    'user_uat_[4]'
                )   
        );

php格式的主数组:

$array_cat = array(1=>"Category1", 2=>"Category2", 3=>"Category3", 4=>"Category4");

这些是来自atat的php中的secondaryaries数组:

$array_usrtest = array(1=>"user_test_[1]", 2=>"user_test_[2]", 3=>"user_test_[3]", 4=>"user_test_[4]");
$array_usruat = array(3=>"user_uat_[3]", 4=>"user_uat_[4]");
$array_usrprod = array(2=>"user_prod_[2]", 4=>"user_prod_[4]");

预期结果

array{
    ["Category1"]=>array(1)
    {
        [0]=>"user_test_[1]"
    }
    ["Category2"]=>array(2)
    {
        [0]=>"user_test_[2]"
        [1]=>"user_prod_[2]"
    }
    ["Category3"]=>array(3)
    {
        [0]=>"user_test_[3]"
        [2]=>"user_uat_[3]"
    }
    ["Category4"]=>array(3)
    {
        [0]=>"user_test_[4]"
        [1]=>"user_prod_[4]"
        [2]=>"user_uat_[4]"
    }
}

3 个答案:

答案 0 :(得分:1)

我会说合并所有数组,然后构建类别数组

$arrs = array_merge($array_usrtest, $array_usruat, $array_usrprod);
$categories = array_fill_keys($array_cat, []);

array_walk($arrs, function($item) use (& $categories){
  preg_match('#(.*)\[(\d)\]#', $item, $matches);
  $key = $matches[2];

  $categories['Category' . $key][] = $item;
});

print_r($categories);

答案 1 :(得分:1)

这是一个简单的解决方案,它不是很好,因为它是针对您的特定值的解决方案,但这是一个很好的起点,如果需要,您可以对其进行改进:

<?php

$array_cat = array(1=>"Category1", 2=>"Category2", 3=>"Category3", 4=>"Category4");
$array_usrtest = array(1=>"user_test_[1]", 2=>"user_test_[2]", 3=>"user_test_[3]", 4=>"user_test_[4]");
$array_usruat = array(3=>"user_uat_[3]", 4=>"user_uat_[4]");
$array_usrprod = array(2=>"user_prod_[2]", 4=>"user_prod_[4]");

$result = [];

foreach ($array_cat as $k => $v) {
    $result[$v] = []; // fill result array with categories
}

$values = array_merge($array_usrtest, $array_usruat, $array_usrprod); // merge arrays into one (all items)

foreach ($values as $k => $value) { // iterate over all values
    preg_match('!\d+!', $value, $match); // get index in [index]
    $result['Category' . $match[0]][] = $value; // append values to category
}

echo '<pre>';
var_dump($result);

结果:

array(4) {
  ["Category1"]=>
  array(1) {
    [0]=>
    string(13) "user_test_[1]"
  }
  ["Category2"]=>
  array(2) {
    [0]=>
    string(13) "user_test_[2]"
    [1]=>
    string(13) "user_prod_[2]"
  }
  ["Category3"]=>
  array(2) {
    [0]=>
    string(13) "user_test_[3]"
    [1]=>
    string(12) "user_uat_[3]"
  }
  ["Category4"]=>
  array(3) {
    [0]=>
    string(13) "user_test_[4]"
    [1]=>
    string(12) "user_uat_[4]"
    [2]=>
    string(13) "user_prod_[4]"
  }
}

答案 2 :(得分:0)

根据您的答案:

<?php

$array_cat = array(1=>"Category1", 2=>"Category2", 3=>"Category3", 4=>"Category4");
$array_usrtest = array(1=>"user_test_[1]", 2=>"user_test_[2]", 3=>"user_test_[3]", 4=>"user_test_[4]");
$array_usruat = array(3=>"user_uat_[3]", 4=>"user_uat_[4]");
$array_usrprod = array(2=>"user_prod_[2]", 4=>"user_prod_[4]");

$values = array_merge($array_usrtest, $array_usruat, $array_usrprod);
$result = [];

foreach ($array_cat as $key => $cat) { 
    foreach ($values as $k => $value) { // iterate over all values
        preg_match('!\d+!', $value, $match); // get index in [index]
        if ($key == $match[0]) {
            $result[$cat][] = $value; //append values to category
        }
    }
}
echo '<pre>';
var_dump($result);

?>

结果:

array(4) {
  ["Category1"]=>
  array(1) {
    [0]=>
    string(13) "user_test_[1]"
  }
  ["Category2"]=>
  array(2) {
    [0]=>
    string(13) "user_test_[2]"
    [1]=>
    string(13) "user_prod_[2]"
  }
  ["Category3"]=>
  array(2) {
    [0]=>
    string(13) "user_test_[3]"
    [1]=>
    string(12) "user_uat_[3]"
  }
  ["Category4"]=>
  array(3) {
    [0]=>
    string(13) "user_test_[4]"
    [1]=>
    string(12) "user_uat_[4]"
    [2]=>
    string(13) "user_prod_[4]"
  }
}