如何在php中递归组合数组

时间:2017-03-19 04:09:25

标签: php

我想将两个数组合并到一个字典中。 键将是第一个数组的不同值,值将是第二个数组中的所有值,位于键的匹配索引位置。



<?php
                $categories = \App\ProjectCategory::all();
                $projects = \App\ProjectCompleted::all();
                $project = \App\ProjectCompleted
                    ::orderBy('title', 'desc')->first();

                ?>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

$a=[2,3,4,5,6,7,8,9,10];
$b=[1,1,3,2,1,2,6,8,8];


$results = array();
for ($x = 0; $x < count($b); $x++) {
    $index = $b[$x];
    if(array_key_exists ($index, $results)){
        $temp = $results[$index];
    }else{
        $temp = array();
    }
    $temp[] = $a[$x];
    $results[$index] = $temp;

}

print_r($results);

答案 1 :(得分:0)

这是实现此目的的一种方法:

$res = [];
foreach ($b as $b_index => $b_val) {
    if (!empty($res[$b_val])) {
        if (is_array($res[$b_val])) {
            $res[$b_val][] = $a[$b_index];
        } else {
            $res[$b_val] = [$res[$b_val], $a[$b_index]];
        }
    } else {
        $res[$b_val] = $a[$b_index];
    }
}
var_dump($res);

更新:另一种方法:

$val_to_index = array_combine($a, $b);
$result = [];
foreach ($val_to_index as $value => $index) {
    if(empty($result[$index])){
        $result[$index] = $value;
    } else if(is_array($result[$index])){
        $result[$index][] = $value;
    } else {
        $result[$index] = [$result[$index], $value];
    }
}
var_dump($result);

答案 2 :(得分:0)

有很多PHP数组函数。我不知道有哪个能解决你的具体问题。你可能可以使用内置的php数组函数的一些组合,但它可能需要你一段时间来清除你的选择并以正确的方式将它们组合在一起。我只想写自己的功能。

这样的事情:

function myCustomArrayFormatter($array1, $array2) {
    $result = array();
    $num_occurrences = array_count_values($array1);
    foreach ($array1 AS $key => $var) {
        if ($num_occurrences[$var] > 1) {
            $result[$var][] = $array2[$key];
        } else {
            $result[$var] = $array2[$key];
        }
    }
    return $result;
}
希望有所帮助。