[英]Merge two object arrays into one object or array with keys and values
[英]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
)
)
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.