不确定是否有内置功能可以做到这一点,所以我想在我浪费时间写一个之前我会问。让我们说我有一个阵列:
Array
(
['first_name'] => John
['last_name'] => Doe
['ssn1'] => 123
['ssn2'] => 45
['ssn3'] => 6789
)
如何创建新密钥['ssn']
,它将结合其他三个的值,以产生以下结果:
Array
(
['first_name'] => John
['last_name'] => Doe
['ssn'] => 123456789
)
它是分开的,因为有3个单独的输入,例如[ ]-[ ]-[ ]
,以防止用户搞砸它。那么,这样做最有效/最优雅的方式是什么?谢谢!
修改
看起来大多数人想出了同样简单的解决方案。必须先给它。谢谢大家!
答案 0 :(得分:4)
$arr['ssn'] = $arr['ssn1'] . $arr['ssn2'] . $arr['ssn3'];
unset($arr['ssn1'], $arr['ssn2'], $arr['ssn3']);
答案 1 :(得分: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 :(得分:2)
$data['ssn']=$data['ssn1'].$data['ssn2'].$data['ssn3'];
unset ($data['ssn1'],$data['ssn2'],$data['ssn3']);
答案 3 :(得分:2)
怎么样:
implode( array_intersect_key( $array, array_flip(
array_filter( array_keys($array), create_function(
'$k', 'return stristr($k, "ssn");'
)))
)));
与仅仅手动连接值相比,这可能会非常缓慢,但想出来很有趣。
答案 4 :(得分:1)
假设此数据来自Web表单,您可以使用输入命名约定。按顺序命名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']);
简单干净。
答案 5 :(得分:-1)
你可以使用implode(“”,$ array)将整个数组内爆成一个新变量