【问题标题】:convert an array to a list of json将数组转换为 json 列表
【发布时间】:2019-05-15 09:10:28
【问题描述】:

我创建了一个数组对象,我想在我的示例输出中像这样转换它。

我想要的输出:

[
    {
        "10:00": 2,
        "10:30": 2,
        "12:00": 2,
        "12:30": 2,
        "13:00": 1,
        "13:30": 1,
        "14:00": 1,
        "14:30": 1,    
        "15:00": 1,    
        "15:30": 1,
        "16:00": 1,
        "16:30": 1,
        "17:00": 1,
        "17:30": 1,
        "18:00": 1,
        "18:30": 1,
        "19:00": 1,
        "19:30": 1,
        "20:00": 1,
        "20:30": 1,
        "21:00": 1,
        "21:30": 1,
        "22:00": 1,
        "22:30": 1,
        "23:00": 1
    }    
]

但这就是我得到的结果

[
    {
        "10:00": 2
    },
    {
        "10:30": 2
    },
    {
        "12:00": 2
    },
    {
        "12:30": 2
    },
    {
        "13:00": 1
    },
    {
        "13:30": 1
    },
    {
        "14:00": 1
    },
    {
        "14:30": 1
    },
    {
        "15:00": 1
    },
    {
        "15:30": 1
    },
    {
        "16:00": 1
    },
    {
        "16:30": 1
    },
    {
        "17:00": 1
    },
    {
        "17:30": 1
    },
    {
        "18:00": 1
    },
    {
        "18:30": 1
    },
    {
        "19:00": 1
    },
    {
        "19:30": 1
    },
    {
        "20:00": 1
    },
    {
        "20:30": 1
    },
    {
        "21:00": 1
    },
    {
        "21:30": 1
    },
    {
        "22:00": 1
    },
    {
        "22:30": 1
    },
    {
        "23:00": 1
    }
]

我正在尝试使用此代码将我的代码转换为我想要的输出

$flat = array();

foreach($tempreserve->result as $v) {
    if (is_array($v)) {
        $flat = array_merge($flat, array_values_recursive($v));
    }
    else {
        $flat[] = $v;
    }
}  

这里是数组对象:

Array
(
    [0] => stdClass Object
        (
            [10:00] => 2
        )

    [1] => stdClass Object
        (
            [10:30] => 2
        )

    [2] => stdClass Object
        (
            [12:00] => 2
        )

    [3] => stdClass Object
        (
            [12:30] => 2
        )

    [4] => stdClass Object
        (
            [13:00] => 1
        )

    [5] => stdClass Object
        (
            [13:30] => 1
        )

    [6] => stdClass Object
        (
            [14:00] => 1
        )

    [7] => stdClass Object
        (
            [14:30] => 1
        )

    [8] => stdClass Object
        (
            [15:00] => 1
        )

    [9] => stdClass Object
        (
            [15:30] => 1
        )

    [10] => stdClass Object
        (
            [16:00] => 1
        )

    [11] => stdClass Object
        (
            [16:30] => 1
        )

    [12] => stdClass Object
        (
            [17:00] => 1
        )

    [13] => stdClass Object
        (
            [17:30] => 1
        )

    [14] => stdClass Object
        (
            [18:00] => 1
        )

    [15] => stdClass Object
        (
            [18:30] => 1
        )

    [16] => stdClass Object
        (
            [19:00] => 1
        )

    [17] => stdClass Object
        (
            [19:30] => 1
        )

    [18] => stdClass Object
        (
            [20:00] => 1
        )

    [19] => stdClass Object
        (
            [20:30] => 1
        )

    [20] => stdClass Object
        (
            [21:00] => 1
        )

    [21] => stdClass Object
        (
            [21:30] => 1
        )

    [22] => stdClass Object
        (
            [22:00] => 1
        )

    [23] => stdClass Object
        (
            [22:30] => 1
        )

    [24] => stdClass Object
        (
            [23:00] => 1
        )

)

希望你们能帮我解决这个问题 我想利用时间来获取数值

【问题讨论】:

  • array_merge() 返回一个数组。您正在将数组附加到 $flat 数组。
  • 完成发布数组先生...
  • 为什么要构建一个具有这样属性的对象? 10:00 不是一个非常合理的属性名称
  • 向我们展示 $tempreserve->result 实际包含的内容。
  • $tempreseve->resulthere is the array object:

标签: php arrays json object


【解决方案1】:
$a=[];
$b=new stdClass();
$k1="12:00";
$k2="12:50";
$k3="13:10";
$b->$k1=1;
$b->$k2=2;
$b->$k3=3;
$a[]=$b;
echo json_encode($a);

结果

[{
    "12:00": 1,
    "12:50": 2,
    "13:10": 3
}]

你想要这样的结果吗?

完整版:

$flat=new stdClass();
foreach($tempreserve as $obj) {
    $a=json_decode(json_encode($obj),true);
    $k=array_keys($a)[0];
    $v=$a[$k];
    $flat->$k=$v;
}
echo (json_encode($flat));

【讨论】:

  • 我怀疑,OP 有一个数组,他们想转换它。这有点手动:)
【解决方案2】:

可以使用foreachjson_encode$arr是数组

$res = [];
foreach($arr as $key => $value){
  foreach($value as $innerkey => $innerValue){
    $res[$innerkey] = $innerValue;
  }
}
echo json_encode($res);

Live Demo

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 2022-09-24
    • 2020-04-27
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2020-08-08
    • 2015-08-06
    相关资源
    最近更新 更多