簡體   English   中英

將兩個數組合並為一個數組(相同的鍵)

[英]Merge two arrays into one array (identic keys)

我認為這是一個非常簡單的問題,但無法解決該問題。 我有兩個數組:

(
    [0] => Array
    (
        [accordion_title] => [accordion-title]Title 1[/accordion-title]
    )
    [1] => Array
    (
        [accordion_title] => [accordion-title]Title 2[/accordion-title]
    )
)

(
    [0] => Array
    (
        [accordion_content] => [accordion-content]Content 1[/accordion-content]
    )
    [1] => Array
    (
        [accordion_content] => [accordion-content]Content 2[/accordion-content]
    )
)

如何合並/合並它們,使它們看起來像這樣?

(
    [0] => Array
    (
        [accordion_title] => [accordion-title]Title 1[/accordion-title]
        [accordion_content] => [accordion-content]Content 1[/accordion-content]
    )
    [1] => Array
    (
        [accordion_title] => [accordion-title]Title 2[/accordion-title]
        [accordion_content] => [accordion-content]Content 2[/accordion-content]
    )
)

謝謝你的幫助。

您可以通過以下方式嘗試:

$array1 = array( array('accordion_title'=>'Title 1'),array('accordion_title'=>'Title 2') );
$array2 = array( array('accordion_content'=>'Content 1'),array('accordion_content'=>'Content 2') );

$array3 = array();
foreach( $array1 as $key => $array )
{
    $array3[] = array( key($array) => current($array), key($array2[$key]) => current($array2[$key]) );
}

print_r( $array3 );

這是輸出:

Array
(
    [0] => Array
        (
            [accordion_title] => Title 1
            [accordion_content] => Content 1
        )

    [1] => Array
        (
            [accordion_title] => Title 2
            [accordion_content] => Content 2
        )

)

更新:

使用此功能,您可以組合無限數組(不僅兩個),即使它們具有不同的大小:

/*   Groups passed arrays in an array of associative arrays with same keys and values
 *
 *   @example          $array1 = array( array('a'=>'val1'),array('a'=>'val2') );
 *                     $array2 = array( array('b'=>'val3'),array('b'=>'val4') );
 *                     $array3 = array( array('c'=>'val5'),array(),array('c'=>'val6') );
 *                     multiArrayCombine( $array1, $array2, $array3 );
 *                     return: array
 *                     (
 *                        0 => array('a'=>'val1','b'=>'val3','c'=>'val5'),
 *                        1 => array('a'=>'val2','b'=>'val4'),
 *                        2 => array('c'=>'val6')
 *                     )
 *                     
 *   @param   array    $array1[, $array2[, $array3...]]
 *
 *   @option  const    T_OBJECT_CAST cast returned assoc arrays as stdObject
 *
 *   @return  array
 */
function multiArrayCombine()
{
    /* Get all passed parameters and T_OBJECT_CAST option: */
    $args     = func_get_args();
    $asObject = ( T_OBJECT_CAST == end($args) );
    if( $asObject ) array_pop( $args );

    $retval = array();          # Init array to be returned

    /* Retrieve highest passed arrays key: */
    $max = 0;
    foreach( $args as $array ) $max = max( $max, max( array_keys($array) ) );

    /* Loop for each arrays key: */
    for( $i=0; $i<=$max; $i++ )
    {
        /* Init associative array to add:  */
        $add = array();

        /* Process actual key ($i) of each passed array:  */
        foreach( $args as $array )
        {
            /* If the key ($i) exists, add  each passed array:  */
            if( isset($array[$i]) AND is_array($array[$i]) )
            {
                foreach( $array[$i] as $key => $val )
                { $add[$key] = $val; }
            }
        }

        /* Add the obtained associative array to return array */
        if( $asObject ) $retval[] = (object) $add;
        else            $retval[] = $add;
    }

    return $retval;
}

因此,使用以下代碼(三個數組):

$array1 = array( array('accordion_title'=>'Title 1'),array('accordion_title'=>'Title 2') );
$array2 = array( array('accordion_content'=>'Content 1'),array('accordion_content'=>'Content 2') );
$array3 = array( array('accordion_date'=>'Date 1'),array(),array('accordion_date'=>'Date 3') );

print_r( multiArrayCombine( $array1, $array2, $array3 ) );

輸出為:

Array
(
    [0] => Array
        (
            [accordion_title] => Title 1
            [accordion_content] => Content 1
            [accordion_date] => Date 1
        )

    [1] => Array
        (
            [accordion_title] => Title 2
            [accordion_content] => Content 2
        )

    [2] => Array
        (
            [accordion_date] => Date 3
        )
)

評估演示

更新2:

  1. 現在,該函數返回每行的所有傳遞的值,而不僅僅是第一行;
  2. 添加了選項T_OBJECT_CAST :在數組列表之后返回常量T_OBJECT_CAST ,返回的數組行格式化為stdObjects而不是數組。

說明:

為了不接受預定的參數,我不將函數格式化為multiArrayCombine( $arg1, $arg2, ... ) ,而是使用func_get_args()函數,即“允許用戶定義的函數接受可變長度參數列表” 。

首先(在最新更新中),我檢查最后一個參數是否為預定義的常量T_OBJECT_CAST :如果是,則將$asObject設置$asObject True ,然后將其彈出參數數組的結尾; 現在在$args變量中,每個傳遞的數組都有一個數組。

下一步:檢索所有傳遞的數組的最大鍵值; 我選擇這種方式,而不是更舒適的foreach( $array1 as $row )以避免在其他數組中的一個數組比第一個數組多的情況下忽略值。 最終,沒有數字鍵被省略。

然后是主循環:處理原始數組的每一行,並將其鍵和值添加到將添加到返回數組的行中。 如果鍵重復,則僅返回最后一個鍵。

處理完每個數組后,我將獲得的行(如果傳遞了此選項,則轉換為對象)添加到返回的數組中。

就這樣!


抱歉,對不起

這樣的事情應該起作用:

$merged = [];
$array1 = [ ... ];
$array2 = [ ... ];
foreach ($array1 as $key => $value) {
    $merged[$key][] = $value;
}
foreach ($array2 as $key => $value) {
    $merged[$key][] = $value;
}

我希望我在這里所做的一切有意義。

也許使用PHP函數array array_merge($array1 ,$array2)

http://php.net/manual/fr/function.array-merge.php

暫無
暫無

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

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