2011-07-20 70 views
0

不確定是否有內置的函數來執行此操作,所以我認爲在浪費寫一個函數之前我會問。比方說,我有一個數組:PHP中的簡單數組問題

Array 
    (
     ['first_name'] => John 
     ['last_name'] => Doe 
     ['ssn1'] => 123 
     ['ssn2'] => 45 
     ['ssn3'] => 6789 
    ) 

如何創建新的密鑰['ssn']將結合其他三個值,導致以下:

Array 
    (
     ['first_name'] => John 
     ['last_name'] => Doe 
     ['ssn'] => 123456789 
    ) 

它有分開的,因爲有是3個獨立的輸入,如[   ]-[  ]-[    ],以防止用戶搞砸。那麼,做這件事最有效/優雅的方式是什麼?謝謝!

編輯

貌似大多數與同簡單的解決方案上來。必須先給它。感謝大家!

回答

1

假設這些數據來自網絡表單,您可以使用輸入命名約定來獲得優勢。以first_name,last_name,ssn [1],ssn [2],ssn [3]的順序命名元素。 $ _REQUEST會自動將這三個元素分配給一個結構化數組。

<input type="text" name="ssn[1]" /> 
<input type="text" name="ssn[2]" /> 
<input type="text" name="ssn[3]" /> 

array 
    'ssn' => 
    array 
     1 => string '123' (length=3) 
     2 => string '456' (length=3) 
     3 => string '7890' (length=4) 

那麼你可以簡單

$_POST['ssn'] = implode('-', $_POST['ssn']); 

簡單幹淨。

+0

最優雅。 +1並回答您的好長官。 – grep

+0

雖然問題。你在' - '內爆,爲什麼/這是怎麼回事? – grep

+0

' - '是數組件的「膠水」。有關更多信息,請參閱http://php.net/manual/en/function.implode.php。 –

4
$arr['ssn'] = $arr['ssn1'] . $arr['ssn2'] . $arr['ssn3']; 
unset($arr['ssn1'], $arr['ssn2'], $arr['ssn3']); 
2

我會用最幼稚的一種解決方案,使用簡單的串連

$your_array['ssn'] = $your_array['ssn1'] . $your_array['ssn2'] . $your_array['ssn3']; 


然後你可以unset這樣了沒有用處的物品:

unset($your_array['ssn1'], $your_array['ssn2'], $your_array['ssn3']); 


也許該代碼看起來太天真 - 但它很容易編寫,而且更重要的是,很容易理解。

2
$data['ssn']=$data['ssn1'].$data['ssn2'].$data['ssn3']; 
unset ($data['ssn1'],$data['ssn2'],$data['ssn3']); 
-1

可以使用破滅( 「」,$陣列),整個陣列內爆到一個新的變量

http://www.php.net/manual/de/function.implode.php

+0

不幸的是,這在我的方案中不起作用。我需要保持其他鍵/值不變。 – grep

+0

它不會碰到orignal陣列? $ newarray = implode(「」,$ array);將從舊數組中產生一個字符串 – Dukeatcoding

+0

這將導致名稱值也崩潰。 – grep

2

如何:

implode(array_intersect_key($array, array_flip(
    array_filter(array_keys($array), create_function(
    '$k', 'return stristr($k, "ssn");' 
))) 
))); 

這可能是痛苦的與僅僅手動連接值相比,速度較慢,但​​很有趣。