Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何将此数组拆分为两个单独的数组或值?_Php_Arrays - Fatal编程技术网

PHP:如何将此数组拆分为两个单独的数组或值?

PHP:如何将此数组拆分为两个单独的数组或值?,php,arrays,Php,Arrays,我希望能够将这两个值拉成两个单独的值,例如,“1519106711000”和“1008.48”、日期和速率。给您: {"cae7fc": ["1519106711000 1008.48","1519107011000 1000.28","1519107311000 1009.89","1519107611000 1000","1519107910000 1006.52","1519108211000 985.68","1519108511000 1009.16","1519108812000 1

我希望能够将这两个值拉成两个单独的值,例如,“1519106711000”和“1008.48”、日期和速率。

给您:

{"cae7fc":
["1519106711000 1008.48","1519107011000 1000.28","1519107311000 1009.89","1519107611000 1000","1519107910000 1006.52","1519108211000 985.68","1519108511000 1009.16","1519108812000 1003.5","1519109111000 998.09"]}

您可以使用以下
regex
preg\u match\u all
来实现您的目标

$json = json_decode('["1519106711000 1008.48","1519107011000 1000.28","1519107311000 1009.89","1519107611000 1000","1519107910000 1006.52","1519108211000 985.68","1519108511000 1009.16","1519108812000 1003.5","1519109111000 998.09"]');

$data = [];
foreach ($json as $row) {
    $row = explode(' ', $row);
    $data[] = ['date' => $row[0], 'rate' => $row[1]];
}

// you can use $data however you want
// it will give you something like this :
/*
[{"date":"1519106711000","rate":"1008.48"},{"date":"1519107011000","rate":"1000.28"},{"date":"1519107311000","rate":"1009.89"},{"date":"1519107611000","rate":"1000"},{"date":"1519107910000","rate":"1006.52"},{"date":"1519108211000","rate":"985.68"},{"date":"1519108511000","rate":"1009.16"},{"date":"1519108812000","rate":"1003.5"},{"date":"1519109111000","rate":"998.09"}]
*/
$rate

$json='{  
   "cae7fc":[  
      "1519106711000 1008.48",
      "1519107011000 1000.28",
      "1519107311000 1009.89",
      "1519107611000 1000",
      "1519107910000 1006.52",
      "1519108211000 985.68",
      "1519108511000 1009.16",
      "1519108812000 1003.5",
      "1519109111000 998.09"
   ]
}';

preg_match_all('/(?<=")\d+/', $json, $date);
preg_match_all('/[\d\.]+(?=")/', $json, $rate);
Array
(
    [0] => Array
        (
            [0] => 1519106711000
            [1] => 1519107011000
            [2] => 1519107311000
            [3] => 1519107611000
            [4] => 1519107910000
            [5] => 1519108211000
            [6] => 1519108511000
            [7] => 1519108812000
            [8] => 1519109111000
        )

)

要解决该问题,您可以使用以下功能:

  • 分解
  • sscanf
  • preg\u match
  • preg_split
使用
sscanf
的示例:

Array
(
    [0] => Array
        (
            [0] => 1008.48
            [1] => 1000.28
            [2] => 1009.89
            [3] => 1000
            [4] => 1006.52
            [5] => 985.68
            [6] => 1009.16
            [7] => 1003.5
            [8] => 998.09
        )

)

按空格分解。请尝试对每个
“cae7fc”
数组元素按空格使用
分解()。Explode无法工作,因为php抛出“Explode()期望参数2为字符串,数组给定”错误。@Alberter yes这是一个预期错误,因为
Explode()
返回数组,所以您必须通过索引访问它,请检查我的soluHesham,谢谢您的帮助。你太棒了!不幸的是,我提供的字符串已经通过json_decode()运行了;json_decode();包括“cae7fc”元素。@albertR然后,您可以使用
foreach($json['cae7fc']作为$row)
团队,这两种解决方案的组合似乎可以工作。谢谢你的帮助,也谢谢你花时间帮忙。干杯请解释您建议的代码以及它应该如何帮助您。顺致敬意,
<?php

$json =
<<<EOF
{"cae7fc":
    ["1519106711000 1008.48","1519107011000 1000.28","1519107311000 1009.89","1519107611000 1000","1519107910000 1006.52","1519108211000 985.68","1519108511000 1009.16","1519108812000 1003.5","1519109111000 998.09"]}
EOF;

$data = array();
foreach((array)json_decode($json, true) as $key => $values) {
    $data[$key] = array();
    foreach ($values as $valuesPairStr) {
        sscanf($valuesPairStr, '%d %f', $date, $rate);
        $data[$key][] = array(
            'date' => $date,
            'rate' => $rate,
        );
    }
}
<?php

$json =
<<<EOF
{"cae7fc":
    ["1519106711000 1008.48","1519107011000 1000.28","1519107311000 1009.89","1519107611000 1000","1519107910000 1006.52","1519108211000 985.68","1519108511000 1009.16","1519108812000 1003.5","1519109111000 998.09"]}
EOF;
$data = (array)json_decode($json, true);
array_walk(
    $data,
    function(&$item, $key) {
        $item = array_map(
            function($pairStr) {
                $parts = explode(' ', $pairStr);
                return array(
                    'date' => isset($parts[0]) ? (int)$parts[0] : null,
                    'rate' => isset($parts[1]) ? (float)$parts[1] : null,
                );
            },
            $item
        );
    }
);