【问题标题】:How to multiply and round only one value of an array with subarrays using php?如何使用php将数组的一个值与子数组相乘和舍入?
【发布时间】:2023-12-25 10:53:01
【问题描述】:

如何使用 PHP 只迭代和修改数组的一个值? 我有以下代码:

<?php
    // That's the output that I receive from an Java program.
    $freeTextOutput = "
        42631673:0.5585319618827993;
        39830245:0.4512246398531659;
        9543481:0.4486841314390102;
        45349208:0.4478453543900579;
        3543584:0.3855027425164259;
        29266117:0.37859229789438587;
        25948743:0.3762908775963289;
        44167053:0.3756673145038688;
        6355749:0.3702819135046792;
        6322651:0.36883803217397765;";

    // Transform output into an array.
    $freeTextOutputArray = explode(";", $freeTextOutput, -1);

比我有以下数组:

Array (
    [0] => 42631673:0.5585319618827993
    [1] => 39830245:0.4512246398531659
    [2] => 9543481:0.4486841314390102
    [3] => 45349208:0.4478453543900579
    [4] => 3543584:0.3855027425164259
    [5] => 29266117:0.37859229789438587
    [6] => 25948743:0.3762908775963289
    [7] => 44167053:0.3756673145038688
    [8] => 6355749:0.3702819135046792
    [9] => 6322651:0.36883803217397765
) 

比我爆炸它,所以我有一个带有子数组的数组:

    // Transform values of the first array into subarrays.
    foreach ($freeTextOutputArray as $value) {
        $freeTextOutputArrayWithSubArrays[] = explode(":", $value);
    }

结果是:

Array (
    [0] => Array (
        [0] => 42631673 [1] => 0.5585319618827993
    )
    [1] => Array (
        [0] => 39830245 [1] => 0.4512246398531659
    )
    etc...
    [9] => Array (
        [0] => 6322651 [1] => 0.36883803217397765
    )
) 

现在我想将子数组的 key[1] 的值乘以 1000 并四舍五入。我就是这样尝试的:

    foreach ($freeTextOutputArrayWithSubArrays as $value) {
        foreach ($value as $wert) {
            $roundedIndex[] = round($wert * 1000);
        }
    }

然后,一切都成倍增加,子数组消失了:

Array (
    [0] => 42631673000
    [1] => 559
    [2] => 39830245000
    [3] => 451
    etc...
    [18] => 6322651000
    [19] => 369
)

那么我要怎么做才能得到以下结果呢?

Array (
    [0] => Array (
        [0] => 42631673 [1] => 558
    )
    [1] => Array (
        [0] => 39830245 [1] => 451
    )
    etc...
    [9] => Array (
        [0] => 6322651 [1] => 368
    )
)

提前谢谢你!!!

【问题讨论】:

    标签: php arrays key-value rounding multiplication


    【解决方案1】:
       foreach ($freeTextOutputArrayWithSubArrays as $value) {
            $roundedIndex[] = array($value[0],round($value[1] * 1000));
        }
    

    结果在 var_dump($roundedIndex) 之后

    array
      0 => 
        array
          0 => string '
    
            42631673' (length=18)
          1 => float 559
      1 => 
        array
          0 => string '
    
            39830245' (length=18)
          1 => float 451
      2 => 
        array
          0 => string '
    
            9543481' (length=17)
          1 => float 449
      3 => 
        array
          0 => string '
    
            45349208' (length=18)
          1 => float 448
      4 => 
        array
          0 => string '
    
            3543584' (length=17)
          1 => float 386
    

    【讨论】:

    • 感谢您的解决方案,非常完美。但我不明白为什么“内部” foreach 不起作用。我想我应该用它来迭代子数组的值,但你证明这不是必需的。
    【解决方案2】:
    <?php
    // That's the output that I receive from an Java program.
    $freeTextOutput = "
        42631673:0.5585319618827993;
        39830245:0.4512246398531659;
        9543481:0.4486841314390102;
        45349208:0.4478453543900579;
        3543584:0.3855027425164259;
        29266117:0.37859229789438587;
        25948743:0.3762908775963289;
        44167053:0.3756673145038688;
        6355749:0.3702819135046792;
        6322651:0.36883803217397765;";
    
    // Transform output into an array.
    $freeTextOutputArray = explode(";", $freeTextOutput, -1);
    foreach ($freeTextOutputArray as $value) {
        $freeTextOutputArrayWithSubArrays[] = explode(":", $value);
    }
    
    foreach ($freeTextOutputArrayWithSubArrays as $key => $value) {
        $freeTextOutputArrayWithSubArrays[$key][1] = round($freeTextOutputArrayWithSubArrays[$key][1] * 1000);
    }
    
    print_r($freeTextOutputArrayWithSubArrays);
    

    【讨论】:

      最近更新 更多