如何在PHP中将数组分离成小数点前后两部分

5

我有一个这样的数组:

Array (
[0] => Array (
[tsk_hours_spent] => 23425.00
)
[1] => Array (
[tsk_hours_spent] => 2.00
)
[2] => Array (
[tsk_hours_spent] => 0.00
)
[3] => Array (
[tsk_hours_spent] => 0.00
)
[4] => Array (
[tsk_hours_spent] => 0.20
)
)

我希望能将结果根据“.”分成两个数组

例如:

第一个数组为:23425、2、0、0、0

第二个数组为:00、00、00、00、20

5个回答

2
尝试这个。
<?php
$tsk_hours_spent = array(array('tsk_hours_spent'=>'23425.00'),array('tsk_hours_spent'=>'2.00'),array('tsk_hours_spent'=>'0.00'),array('tsk_hours_spent'=>'0.00'),array('tsk_hours_spent'=>'0.00'));

$finalArray = array();
foreach($tsk_hours_spent as $key){

        $tmp = (explode('.',$key['tsk_hours_spent']));
        $finalArray['partOne'][] = $tmp[0];
        $finalArray['partSecond'][] = $tmp[1];

}
echo implode(',',$finalArray['partOne']);
echo "</br>";
echo implode(',',$finalArray['partSecond']);

没问题,伙计,享受胡里节吧 :-) - sismaster
那在浮点数上行不通,只能用于字符串,而问题中使用了浮点数。 - Andy Gee

1
这个问题的功能性方法:
$arr1 = $arr2 = array();

array_walk($data, function(&$value) use (&$arr1, &$arr2) {
    $parts = explode('.', $value['tsk_hours_spent']);
    $arr1[] = $parts[0];
    $arr2[] = $parts[1];
});

echo implode(',', $arr1);
echo implode(',', $arr2);

更简单的解决方案使用 foreach
$arr1 = $arr2 = array();

foreach ($data as $arr) {
    list($beforedot, $afterdot) = explode('.', $arr['tsk_hours_spent']);
    $arr1[] = $beforedot;
    $arr2[] = $afterdot;
}

echo implode(',', $arr1);
echo implode(',', $arr2);

演示


如果使用浮点数,输出结果不正确:23425.2,0,0,0,0 ,,,,2 23425.2,0,0,0,0 ,,,,2 - Andy Gee

1
尝试这个,
  $array=array(array('tsk_hours_spent' => '23425.00'),
         array('tsk_hours_spent' => '2.00'),
         array('tsk_hours_spent' => '0.00'),
         array('tsk_hours_spent' => '0.00'),
         array('tsk_hours_spent' => '0.20'));
 $hour=array();
 $minut=array();

foreach($array as $value)
{

$temp=explode('.', $value['tsk_hours_spent'].' ');
array_push($hour, $temp[0]);
array_push($minut, $temp[1]);
}

  print_r($hour);
  print_r($minut);

Output

Array
 (
[0] => 23425
[1] => 2
[2] => 0
[3] => 0
[4] => 0
 )

  Array
 (
 [0] => 00 
 [1] => 00 
 [2] => 00 
 [3] => 00 
 [4] => 20 
  )

1
与上述答案不同,此代码使用浮点数而非字符串。
$arr = array();
$arr[] = array('tsk_hours_spent'=>23425.00); //floating point numbers
$arr[] = array('tsk_hours_spent'=>2.00);
$arr[] = array('tsk_hours_spent'=>0.00);
$arr[] = array('tsk_hours_spent'=>0.00);
$arr[] = array('tsk_hours_spent'=>0.20);

$first = array();
$second = array();
foreach($arr as $k => $v){
    $ex = explode('.',strval($v['tsk_hours_spent']));
    $first[] = $ex[0];
    $second[] = isset($ex[1])?str_pad($ex[1],2,0,STR_PAD_RIGHT):'00';
}

print_r($first);
print_r($second);

Array
(
    [0] => 23425
    [1] => 2
    [2] => 0
    [3] => 0
    [4] => 0
)

Array
(
    [0] => 00
    [1] => 00
    [2] => 00
    [3] => 00
    [4] => 20
)

1

除了 @sisimaster 的代码更短之外,这里还有更短的代码。

考虑到 $a 是你所需的数组。

  for ($i=0;$i<=count($a)-1;$i++){
        list($whole[], $decimal[]) = explode('.', $a[$i]['tsk_hours_spent']);   
  }  


  $wholenumber=implode(",",$whole); //23425,2,0,0,0
  $decimalnumber=implode(",",$decimal);//00,00,00,00,00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接