从字符串中提取值以分配到数组中
Pull values from string to assign into an array
我有一个项目,我使用 salesforce 的 RestAPI 从 SOQL 中提取数据。我已经清理了响应,这就是我目前正在处理的内容:
Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1
我在 PHP 工作,我想根据这些数据构建一个数组。例如:
graph_data = array(
array("Created" => array("2021-03-02","2021-02-23","2021-02-20","2021-02-16")),
array("Tracks" => array(1,3,4,41,1)));
有人对此有什么建议吗?我试过做一些正则表达式,但我认为这不是正确的解决方案。最初,我把它作为一个对象取回,但没有干净的方法将它们放入关联数组,因为 json_decode 和 json_encode 不起作用。
作为参考,我正在基于此动态数据构建图表,需要将创建的日期作为 x 轴,将轨道作为 y 轴。
这可以使用内置的 PHP 函数来实现:
<?php
$str = 'Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1
';
$arr = explode(',', $str);
$temp = array_chunk($arr, 2);
$finalArray = [];
$i=0;
if (! empty($temp)) {
foreach ($temp as $elem) {
if (! empty($elem)) {
foreach ($elem as $secondary) {
$tempSecondary = explode(':', $secondary);
$finalArray[$i][$tempSecondary[0]] = $tempSecondary[1];
}
}
++$i;
}
}
echo '<pre>';print_r($finalArray);echo '</pre>';
输出:
Array
(
[0] => Array
(
[Created] => 2021-03-02
[Tracks] => 1
)
[1] => Array
(
[Created] => 2021-02-23
[Tracks] => 3
)
[2] => Array
(
[Created] => 2021-02-20
[Tracks] => 4
)
[3] => Array
(
[Created] => 2021-02-16
[Tracks] => 41
)
[4] => Array
(
[Created] => 2021-02-06
[Tracks] => 1
)
[5] => Array
(
[Created] => 2021-02-02
[Tracks] => 3
)
[6] => Array
(
[Created] => 2021-02-01
[Tracks] => 2
)
[7] => Array
(
[Created] => 2021-01-29
[Tracks] => 1
)
[8] => Array
(
[Created] => 2021-01-22
[Tracks] => 1
)
[9] => Array
(
[Created] => 2021-01-19
[Tracks] => 1
)
[10] => Array
(
[Created] => 2021-01-15
[Tracks] => 1
)
[11] => Array
(
[Created] => 2021-01-14
[Tracks] => 1
)
[12] => Array
(
[Created] => 2021-01-13
[Tracks] => 1
)
)
解释:
用逗号分隔字符串。
现在,使用array_chunk() 函数将数组拆分为两个长度的元素。
将拆分后的数组追加到结果数组中。
explode()
和 foreach()
的解决方案
$arr = explode(',', $str);
$finalArray = [];
foreach($arr as $ar){
$againExplode = explode(':',$ar);
$finalArray[$againExplode[0]][] = $againExplode[1];
}
print_r($finalArray);
我有一个项目,我使用 salesforce 的 RestAPI 从 SOQL 中提取数据。我已经清理了响应,这就是我目前正在处理的内容:
Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1
我在 PHP 工作,我想根据这些数据构建一个数组。例如:
graph_data = array(
array("Created" => array("2021-03-02","2021-02-23","2021-02-20","2021-02-16")),
array("Tracks" => array(1,3,4,41,1)));
有人对此有什么建议吗?我试过做一些正则表达式,但我认为这不是正确的解决方案。最初,我把它作为一个对象取回,但没有干净的方法将它们放入关联数组,因为 json_decode 和 json_encode 不起作用。
作为参考,我正在基于此动态数据构建图表,需要将创建的日期作为 x 轴,将轨道作为 y 轴。
这可以使用内置的 PHP 函数来实现:
<?php
$str = 'Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1
';
$arr = explode(',', $str);
$temp = array_chunk($arr, 2);
$finalArray = [];
$i=0;
if (! empty($temp)) {
foreach ($temp as $elem) {
if (! empty($elem)) {
foreach ($elem as $secondary) {
$tempSecondary = explode(':', $secondary);
$finalArray[$i][$tempSecondary[0]] = $tempSecondary[1];
}
}
++$i;
}
}
echo '<pre>';print_r($finalArray);echo '</pre>';
输出:
Array
(
[0] => Array
(
[Created] => 2021-03-02
[Tracks] => 1
)
[1] => Array
(
[Created] => 2021-02-23
[Tracks] => 3
)
[2] => Array
(
[Created] => 2021-02-20
[Tracks] => 4
)
[3] => Array
(
[Created] => 2021-02-16
[Tracks] => 41
)
[4] => Array
(
[Created] => 2021-02-06
[Tracks] => 1
)
[5] => Array
(
[Created] => 2021-02-02
[Tracks] => 3
)
[6] => Array
(
[Created] => 2021-02-01
[Tracks] => 2
)
[7] => Array
(
[Created] => 2021-01-29
[Tracks] => 1
)
[8] => Array
(
[Created] => 2021-01-22
[Tracks] => 1
)
[9] => Array
(
[Created] => 2021-01-19
[Tracks] => 1
)
[10] => Array
(
[Created] => 2021-01-15
[Tracks] => 1
)
[11] => Array
(
[Created] => 2021-01-14
[Tracks] => 1
)
[12] => Array
(
[Created] => 2021-01-13
[Tracks] => 1
)
)
解释:
用逗号分隔字符串。
现在,使用array_chunk() 函数将数组拆分为两个长度的元素。
将拆分后的数组追加到结果数组中。
explode()
和 foreach()
$arr = explode(',', $str);
$finalArray = [];
foreach($arr as $ar){
$againExplode = explode(':',$ar);
$finalArray[$againExplode[0]][] = $againExplode[1];
}
print_r($finalArray);