将具有float索引的php数组解析为新数组

时间:2014-10-22 16:53:18

标签: php

我有一个带有浮动索引的数组,我从插件中获取。我想解析这个数组并取浮点数并将它们作为一个新数组放入。意思是我拥有的是

[1] => gsurvey128f54af2
[2] => gsurvey282bd4253
[5.1] => gsurvey5649a964f
[5.2] => gsurvey5fddb5e9f
[5.3] => gsurvey533c5b311
[5.4] => gsurvey5c8933efb
[5.5] => gsurvey5da48f59b

我想要的是:

    [1] => gsurvey128f54af2
    [2] => gsurvey282bd4253
    [5] => array ( 
         [0] => gsurvey5649a964f
         [1] => gsurvey5fddb5e9f
         [2] => gsurvey533c5b311
         [3] => gsurvey5c8933efb
         [4] => gsurvey5da48f59b
)

我不清楚什么是解决这个问题的最佳方法。

3 个答案:

答案 0 :(得分:1)

我在上面做了评论,这个问题非常容易出错,因为有可能输入会将单个值同时设置为字符串和数组。那显然会失败。假设输入是干净的......

$new_array = array();
foreach($old_array as $key=>$val)
{
  $a = explode('.', $key);
  if(sizeof($a)==2)
  {
    if(!isset($new_array[$a[0]])) $new_array[$a[0]] = array();
    $new_array[$a[0]][] = $val;
  }
  else $new_array[$key]=$val;
}

答案 1 :(得分:0)

对于这种特殊情况,这应该有效:

foreach($array as $k => $v) {
    if(count($i = explode('.', $k)) > 1) {
        $result[$i[0]][] = $v;
    } else {
        $result[$k] = $v;
    }
}

答案 2 :(得分:0)

array_walk示例:

$array = array (
    '1' => 'gsurvey128f54af2',
    '2' => 'gsurvey282bd4253',
    '5.1' => 'gsurvey5649a964f',
    '5.2' => 'gsurvey5fddb5e9f',
    '5.3' => 'gsurvey533c5b311',
    '5.4' => 'gsurvey5c8933efb',
    '5.5' => 'gsurvey5da48f59b'
);

$output = array();
array_walk( $array, function( $item, $key ) use ( &$output ) {
    $keys = explode( '.', $key );
    isset( $keys[1] ) ? $output[ $keys[0] ][ $keys[1] ] = $item : $output[ $keys[0] ] = $item;
});

print_r( $output );
/*
Array
(
    [1] => gsurvey128f54af2
    [2] => gsurvey282bd4253
    [5] => Array
        (
            [1] => gsurvey5649a964f
            [2] => gsurvey5fddb5e9f
            [3] => gsurvey533c5b311
            [4] => gsurvey5c8933efb
            [5] => gsurvey5da48f59b
        )

)
*/