json 如何在PHP中解析嵌套的关联数组以按特定顺序进行echo?

yzuktlbb  于 2023-03-24  发布在  PHP
关注(0)|答案(2)|浏览(113)

此问题在此处已有答案

Two arrays in foreach loop(24个答案)
6小时前关门了。
刚开始在PHP中使用JSON数据,一整天都在这个问题上。我有一个特定股票的OHLC/V值的嵌套关联JSON数组。下面是json_decode()返回的JSON文件的最小示例,带有true标志。

$data = array(
    "c"=>array(
        0 => "162.75",
        1 => "162.27"
    ),
    "h"=>array(
        0 => "166.77",
        1 => "166.22"
    ),
    "l"=>array(
        0 => "162.5",
        1 => "162.2"
    ),
    "o"=>array(
        0 => "164.63",
        1 => "162.67"
    ),
    "s"=>"ok",
    "t"=>array(
        0 => "1679443200",
        1 => "1679529600"
    ),
    "v"=>array(
        0 => "4367267",
        1 => "1865365"
    )
);

对于每个以字母命名的数组(除了s之外),我需要获得以下格式的单行输出:

array("x" => tVal, "y" => array(oVal ,hVal ,lVal ,cVal, vVal)),

下面是“0”的结果示例:

array("x" => 1679443200, "y" => array(164.63 ,166.77 ,162.5 ,162.75, 4367267)),

这些array()线中的每一条都将被制成另一个具有以下格式的数组,以创建蜡烛图。

$dataPoints = array( 

   array(result1),

   array(result2),
   array(resultN)

);

真实的的JSON数据将返回90天的数据,因此理想情况下循环必须达到90天,但如果可用时间少于90天,我更希望它在数组末尾自动停止。
以下是我在测试一些可能的解决方案时得出的结论:

$i = 0;
while($i <= 90){
    foreach($data as $x => $val){
        if($x == 't'){
            echo 'array(x => '.$val[$i].'), y=array(';
            echo '<br>';
        }
        if($x != 's' and $x != 't'){
          echo $x.'='.$val[$i];
          echo '<br>';
        }
    }
    $i++;
    echo '<br>';
}

行0的示例输出为:

c=162.75
h=166.77
l=162.5
o=164.63
array(x => 1679443200), y=array(
v=4367267

如您所见,我能够启动正确的输出数组并将“t”结果移动到正确的位置,但我无法找到正确排序“o”、“h”、“l”、“c”和“v”的方法。

fykwrbwg

fykwrbwg1#

你不需要嵌套循环,只要索引合适的嵌套数组就可以了。

$results = [];
for ($i = 0; $i <= 90; $i++) {
    $row = [
        'x' => $data['x'][$i], 
        'y' => [$data['o'][$i], $data['h'][$i], $data['c'][$i], $data['v'][$i]]
    ];
    $results[] = $row;
}
print_r($results);
lokaqttq

lokaqttq2#

echo 'array(<br>';
for ($i = 0; $i <= 90; $i++)
    echo "array(\"x\" => {$data['t'][$i]}, 
                \"y\" = array({$data['o'][$i]}, " .
               "{$data['h'][$i]}, {$data['l'][$i]}, " . 
               "{$data['c'][$i]}, {$data['v'][$i]})),<br>";
echo ');<br>';

相关问题