PHP:如何将此数组拆分为两个单独的数组或值?
我希望能够将这两个值拉成两个单独的值,例如,“1519106711000”和“1008.48”、日期和速率。给您: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
{"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
);
}
);