dqrmkdu25623 2014-04-10 14:03
浏览 15
已采纳

重新排列mutidimention数组PHP

I have an array $session that I extract from an awstats file:

# Session range - Number of visits
BEGIN_SESSION 7
1h+ 10
5mn-15mn 9
0s-30s 107
2mn-5mn 7
30s-2mn 21
15mn-30mn 4
30mn-1h 11
END_SESSION

First I wanted to rearrange this by adding the two values of 0s-30s & 30s-2mn and creating another one, here's how I tried it:

$newline="
";
$lines = explode($newline,$session);
$results = array();
foreach($lines as $line) {
     $parts = explode(" ",trim($line),2);
     if( count($parts) < 2) continue;
     else {
        $results[$parts[0]] = intval($parts[1]);
     }
}

$temp['0s-30s'] = (isset($results['0s-30s'])?$results['0s-30s']:NULL);
$temp['30s-2mn'] = (isset($results['30s-2mn'])?$results['30s-2mn']:NULL);
$results['0s-2mn'] = $temp['0s-30s'] + $temp['30s-2mn'];
unset($results['0s-30s'],$results['30s-2mn']);
$session = $results['BEGIN_SESSION'].$newline;
foreach($results as $k=>$v) $session .= $k." ".$v.$newline;
$session .= "END_SESSION";


$session = explode("
", $session) ; 
unset($session[(count($session)-1)]) ; 
unset($session[0]) ; 
unset($session[1]) ;
$sessions = array();

foreach ($session as $key => $value) {
    $session[$key] = explode(" ", $value) ;
    $sessions[] = array($session[$key][0],trim($session[$key][1])) ; 
}

and it displays me this array :

        Array
(
    [0] => Array
        (
            [0] => 1h+
            [1] => 10
        )

    [1] => Array
        (
            [0] => 5mn-15mn
            [1] => 9
        )

    [2] => Array
        (
            [0] => 2mn-5mn
            [1] => 7
        )

    [3] => Array
        (
            [0] => 15mn-30mn
            [1] => 4
        )

    [4] => Array
        (
            [0] => 30mn-1h
            [1] => 11
        )

    [5] => Array
        (
            [0] => 0s-2mn
            [1] => 128
        )

)

Is there a way to rearrange my array like this:

Array
(
    [0] => Array
        (
            [0] => 1h+
            [1] => 10
        )

    [1] => Array
        (
            [0] => 30mn-1h
            [1] => 11
        )

    [2] => Array
        (
            [0] => 15mn-30mn
            [1] => 4
        )

    [3] => Array
        (
            [0] => 5mn-15mn
            [1] => 9
        )

    [4] => Array
        (
            [0] => 2mn-5mn
            [1] => 7
        )

    [5] => Array
        (
            [0] => 0s-2mn
            [1] => 128
        )

)

Knowing that $session sometimes come with missing sessions. Any help with this? Thanks.

  • 写回答

1条回答 默认 最新

  • duanchai0028 2014-04-10 14:25
    关注
    <?php
    
    $session = 'BEGIN_SESSION 7
    1h+ 10
    5mn-15mn 9
    0s-30s 107
    2mn-5mn 7
    30s-2mn 21
    15mn-30mn 4
    30mn-1h 11
    END_SESSION';
    
    $newline="
    ";
    $lines = explode($newline,$session);
    $results = array();
    
    foreach($lines as $line) {
        $parts = explode(" ", trim($line), 2);
        if (in_array($parts[0], array('BEGIN_SESSION', 'END_SESSION'))) continue;
        else $results[$parts[0]] = intval($parts[1]);
    }
    
    $temp['0s-30s'] = isset($results['0s-30s']) ? $results['0s-30s'] : 0;
    $temp['30s-2mn'] = isset($results['30s-2mn']) ? $results['30s-2mn'] : 0;
    $results['0s-2mn'] = $temp['0s-30s'] + $temp['30s-2mn'];
    unset($results['0s-30s'], $results['30s-2mn']);
    
    $order = array('0s-2mn', '2mn-5mn', '5mn-15mn', '15mn-30mn', '30mn-1h', '1h+');
    
    uksort($results, function($a, $b) use ($order) {
        return array_search($a, $order) < array_search($b, $order);
    });
    
    var_dump($results);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么