PHP中的简单数组问题

时间:2011-07-20 19:57:04

标签: php arrays

不确定是否有内置功能可以做到这一点,所以我想在我浪费时间写一个之前我会问。让我们说我有一个阵列:

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

如何创建新密钥['ssn'],它将结合其他三个的值,以产生以下结果:

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

它是分开的,因为有3个单独的输入,例如[   ]-[  ]-[    ],以防止用户搞砸它。那么,这样做最有效/最优雅的方式是什么?谢谢!

修改

看起来大多数人想出了同样简单的解决方案。必须先给它。谢谢大家!

6 个答案:

答案 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)将整个数组内爆成一个新变量

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