簡體   English   中英

"在PHP中按ID組合兩個數組"

[英]Combining two arrays by ID in PHP

我需要在 PHP 中比較兩個二維數組。 數組如下所示:

Array one
ID Name
11 Aa 
11 Ab
12 Bb
13 Cc
14 Dd
15 Ee

Array two
ID Content
11 Cat
13 Dog
14 Donkey

一種快速的方法是遍歷第一個數組並追加第二個數組的值:

$array1 = array('11' => 'Aa', '12' => 'Bb', '13' => 'Cc', '14' => 'Dd', '15' => 'Ee');
$array2 = array('11' => 'Cat', '13' => 'Dog', '14' => 'Donkey');

$combined = array();
foreach ($array1 as $key => $val) {
    $combined[$key] = $val . (isset($array2[$key]) ? ' '.$array2[$key] : '');
}

這將遍歷$array1每個鍵/值,並將其添加到$combined數組中。 如果$array2的值存在相同的索引,則會將其附加到$array1該值后,並用空格分隔。

更新:我再次讀錯了數組的格式。 我假設ID是數組中的實際索引,但是由於示例數組輸出同時具有NameContent ,因此我假設ID是實際的索引字符串值,而不是數組本身的索引。 要堅持使用循環方案,可以迭代第一個數組,並在第二個數組中嵌套嵌套的循環:

$array1 = array(
        array('ID' => '11', 'Name' => 'Aa'),
        array('ID' => '12', 'Name' => 'Bb'),
        array('ID' => '13', 'Name' => 'Cc'),
        array('ID' => '14', 'Name' => 'Dd'),
        array('ID' => '15', 'Name' => 'Ee'),
    );
$array2 = array(
        array('ID' => '11', 'Content' => 'Cat'),
        array('ID' => '13', 'Content' => 'Dog'),
        array('ID' => '14', 'Content' => 'Donkey')
    );

$combined = array();
foreach ($array1 as $arr) {
        $comb = array('ID' => $arr['ID'], 'Name' => $arr['Name'], 'Content' => '');
        foreach ($array2 as $arr2) {
            if ($arr2['ID'] == $arr['ID']) {
                $comb['Content'] = $arr2['Content'];
                break;
            }
        }
    $combined[] = $comb;
}

這會將$array1中的每個值添加到組合數組中,並且僅當$array2中的值包含相同的ID字段時,才會將其Content字段也添加到數組中。 這可以擴展為處理任何數量的字段,無論是通過名稱還是通過更改inner-if塊使其具有$comb += $arr2; 相反(應該合並所有不存在的索引)。

您將必須執行自己的功能:

function putThemTogether($array1, $array2) {
    $output = array();
    foreach($array1 as $key => $value) {
        if (!isset($output[$key]))
            $output[$key] = array();
        $output[$key][] = $value;
    }
    foreach($array2 as $key => $value) {
        if (!isset($output[$key]))
            $output[$key] = array();
        $output[$key][] = $value;
    }
    return $output;
}

為了使它更好,您可以使其采用任意數量的參數。

$result = array_map (
  function ($item) { return is_array($item) ? implode(' ', $item) : $item; },
  array_merge_recursive($array1, $array2);
);

注意,兩個數組都需要字符串鍵

嘗試這個,我希望它會起作用

function merge_two_arrays($array1,$array2) {
    $data = array();
    $arrayAB = array_merge($array1,$array2);
    foreach ($arrayAB as $value) {
    $id = $value['id'];
    if (!isset($data[$id])) {
        $data[$id] = array();
    }
    $data[$id] = array_merge($data[$id],$value);
    }
    return $data;
}

$master_array = merge_two_arrays($array1,$array2);

另一個解決方案是使用array_search<\/code>和array_column<\/code> (從 PHP 5.5.0 開始)。

foreach ($array1 as $key => $val) {
    $found_key = array_search($val['ID'], array_column($array2, 'ID'));
    if ($found_key !== false) { $array1[$key]['Content'] = $array2[$found_key]['Content']; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM