2011-06-11 90 views
1

我有一個表單提交關於檢查點的報告。每個檢查點都有一個「狀態」和一個「評論」。形式設置,使它返回鍵爲這樣的檢查點ID的多維數組:PHP - 將數組值連接成一個新數組,給定兩個具有相同鍵的數組

array(3) { 
    ["status"]=> 
    array(2) { 
    ["000046"]=> 
    string(1) "S" 
    ["000047"]=> 
    string(1) "S" 
    } 
    ["comment"]=> 
    array(2) { 
    ["000046"]=> 
    string(6) "Flarg." 
    ["000047"]=> 
    string(0) "" 
    } 
    ["submit"]=> 
    string(13) "SUBMIT REPORT" 
} 

在上文中,檢查點000046具有「S」的狀態和Flarg的」評論。 「

我想要做的是創建一個新的數組,將兩個值以特定格式結合在一起,同時保留鍵。末端應該看起來像這樣:

array(1) { 
    ["000046"]=> 
    string(10) "S-'Flarg.'" 
    ["000047"]=> 
    string(1) "S" 
} 

什麼是最有效的方式去做這個?

回答

1

鑑於$array$array2你的兩個數組

$result = array(); 
foreach($array as $k=>$v) { 
    $result[$k] = $v; 
    if (isset($array2[$k])) 
    $result[$k] .= '-' . $array2[$k]; 
} 
print_r($result); 
+1

+1好答案! – AlphaMale 2013-05-09 17:55:26

0

沒有本地的PHP函數來爲你做這個(這將是最有效的)。只需循環兩個數組並開始收集。

一個代碼示例會被侮辱,所以我省略了它。

0

鑑於$checkpoints在你的問題中列出的array,你可以使用:

$newCheckpoints = array(); 
foreach ($checkpoints['status'] as $k => $status) { 
    $newCheckpoints[$k] = $status . (!empty($checkpoints["comment"][$k]) ? "-'{$checkpoints['comment'][$k]}'" : ''); 
} 
0

首先合併遞歸地狀態和評論的陣列,再用膠水把這樣的兩個部分:

$output = array_merge_recursive($array['status'], $array['comment']); 
array_walk($output, function (&$value, $key) { $value = empty($value[1]) ? $value[0] : $value[0]."-'".$value[1]."'"; }); 

但這隻能在PHP 5.3或更高版本中使用。做同樣在PHP的較低版本,您應該先創建功能,然後通過它的名字:

function gluecomments(&$value, $key) { $value = empty($value[1]) ? $value[0] : $value[0]."-'".$value[1]."'"; } 
$output = array_merge_recursive($array['status'], $array['comment']); 
array_walk($output, 'gluecomments'); 

證明:

此輸入:

$array = array(
    'status' => array(
     '000046' => 'S', 
     '000047' => 'S', 
    ), 
    'comment' => array(
     '000046' => 'Flarg.', 
     '000047' => '', 
    ), 
    'submit' => 'SUBMIT REPORT', 
); 

print_r($output)打印如下:

Array 
(
    [000046] => S-'Flarg.' 
    [000047] => S 
) 

這可能是你想要的。

編輯:

我已經刪除了檢查,無論它是一個數組或不 - 我假設變量總是在你已經給我們的格式,所以這不是必需的。

+0

我很好奇,你的基準測試是否與我的答案中的普通「foreach」相比?它有多快? – thirtydot 2011-06-11 14:46:51

相關問題