【问题标题】:PHP: Associative array to numeric arrayPHP:关联数组到数值数组
【发布时间】:2019-05-12 12:56:54
【问题描述】:

我有以下问题:

我有一个包含一些数据的二维数组,第一个索引包含“年份”,第二个索引包含一个包含值的范围。

这是一个如何通过print_r() 解析常规数据的示例。

Array
(
    [2017] => Array
        (
            [0] => 215
            [1] => 182
            [2] => 149
            [3] => 159
            [4] => 176
            [5] => 151
            [6] => 221
            [7] => 185
            [8] => 178
            [9] => 191
            [10] => 265
            [11] => 304
        )

    [2016] => Array
        (
            [0] => 162
            [1] => 179
            [2] => 162
            [3] => 201
            [4] => 169
            [5] => 148
            [6] => 139
            [7] => 139
            [8] => 149
            [9] => 187
            [10] => 264
            [11] => 229
        )
}

在这种情况下效果很好。我使用 PHP 中的 json_encode()JSON.parse() 将数组发送到 JavaScript。

但是,有一个特殊的案例运行得不够好。

[2015] => Array
    (
        [1] => 4
        [6] => 88
        [7] => 119
        [8] => 117
        [9] => 107
        [10] => 151
        [11] => 218
    )

该数组被解释为关联数组,因此 JavaScript 被解释为 Object 数据类型。我的外部库需要一个数组,因此它会引发错误并且 JavaScript 执行会停止。

当我尝试用这种方法在中间填充缺失的数据时

foreach($eM_value as $key => $value)
{
    for($x = 0;$x <= 11;$x++)
        $eM_value[$key][$x] = ((isset($eM_value[$key][$x])) ? intval($eM_value[$key][$x]) : 0);
}

它仍然被解释为一个关联数组。

[2015] => Array
    (
        [1] => 4
        [6] => 88
        [7] => 119
        [8] => 117
        [9] => 107
        [10] => 151
        [11] => 218
        [0] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
    )

如何将此特定条目转换为数值数组?

如果需要更多信息,请发表评论,我会添加它。

【问题讨论】:

  • ksort 数组。
  • 如果数字键中有“孔”,最好将其理解为 JS 中的对象,否则您将有一堆未定义的元素填充孔。数组在 JS 中不能有空洞。
  • 尝试创建一个新数组而不是重用$eM_value
  • 在 json_encode 之前创建新数组。使用 array_values 获取没有索引间隙的范围。 foreach($array as $year =&gt; $ranges) { newArray[$year] = array_values($ranges)} 和 json_encode 新数组

标签: javascript php arrays


【解决方案1】:

只需在 PHP 中使用array_values 函数,它就会输出一个包含所有值的数值数组

【讨论】:

    【解决方案2】:

    您可以使用array_fill准备一个占位符数组,然后array_replace将真实数据放入:

    <?php
    
    $input = [
        1 => 10,
        3 => 12,
        5 => 54
    ];
    
    $output = array_replace(array_fill(0, 12, 0), $input);
    print_r($output);
    

    会给你:

    Array ( 
       [0] => 0 
       [1] => 10 
       [2] => 0 
       [3] => 12 
       [4] => 0 
       [5] => 54 
       [6] => 0 
       [7] => 0 
       [8] => 0 
       [9] => 0 
       [10] => 0 
       [11] => 0 
    )
    

    这样可以避免对键进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2015-07-16
      • 2012-12-22
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多