我從資料庫查詢結果集的單列中獲取多行文本塊,如下所示:
$data = <<<DATA
DATE = FEE = PAYMENT
2021-03-09 = 119.25 = 119.25 = 2021-04-13
2021-03-15 = 119.25 = 119.25 = 2021-04-13
DATA;
我需要決議此文本,忽略標題行和任何空白行,提取每行中的第一個和第二個值(日期和浮點值),然后填充關聯陣列的陣列。
期望的結果:
[
{"Date": "2021-01-23", "fee": 0.00, "title": "example" },
{"Date": "2021-01-31", "fee": 0.00, "title": "example" },
]
我當前的代碼:
$data = implode("=", $data);
$data = str_replace("\n", "=", $data);
$data = str_replace(" ", "", $data);
$data = explode("=", $data);
但我的結果是這樣的:
Array
(
[0] => DATE
[1] => FEE
[2] => PAYMENT
[3] => 2021-01-23
[4] => 119.25
[5] => 119.25
[6] => 2021-01-31
[7] => 2021-01-31
[8] => 119.25
[9] => 119.25
[10] => 2021-04-13
)
我還嘗試迭代并保存每 n 行:
$result = array();
$data = array_values($data);
$count = count($data);
for($i = 0; $i < $count; $i = 4) {
$result = ["Date".$i => $data[$i]];
}
for($i = 0; $i < $count; $i = 2) {
$result["fee"] = $data[$i];
}
uj5u.com熱心網友回復:
您需要先按換行符拆分,洗掉第一行,然后再按等號拆分。修剪以洗掉空格并添加為陣列。最后將陣列轉換為 JSON 字串。
$result = 'DATE = FEE = PAYMENT
2021-03-09 = 119.25 = 119.25 = 2021-04-13
2021-03-15 = 119.25 = 119.25 = 2021-04-13';
$rows = explode("\n", $result);
array_shift($rows);
$results = [];
foreach ($rows as $row) {
$row = trim($row);
if (empty($row)) continue;
[$date, $fee] = array_map('trim', explode('=', $row));
$results[] = [
'date' => $date,
'fee' => floatval($fee),
'title' => 'example',
];
}
echo json_encode($results, JSON_PRETTY_PRINT);
輸出
[
{
"date": "2021-03-09",
"fee": 119.25,
"title": "example"
},
{
"date": "2021-03-15",
"fee": 119.25,
"title": "example"
}
]
uj5u.com熱心網友回復:
決議示例輸入將是最優雅的,sscanf()因為它會正確洗掉不需要的空格并將數字子字串轉換為浮點型別值。在制作 的“格式”引數時sscanf(),%s表示連續的非空白字符字串,%f表示浮點值。
從內部分配新變數時sscanf(),回傳值是分配值的數量。決議“header”/第一行時,數字子串不會被匹配%f,所以只會回傳1。每當函式計算一行并回傳 時2,將該資料推送到結果陣列中。 compact()是一種從現有變數填充關聯陣列的簡潔方便的方法。
代碼:(演示)
$lines = <<<PAYLOAD
DATE = FEE = PAYMENT
2021-03-09 = 119.25 = 119.25 = 2021-04-13
2021-03-15 = 119.25 = 119.25 = 2021-04-13
PAYLOAD;
$results = [];
foreach (explode("\n", $lines) as $row) {
if (sscanf($row, '%s = %f', $date, $fee) === 2) {
$title = 'example';
$result[] = compact(['date', 'fee', 'title']);
}
}
echo json_encode($result, JSON_PRETTY_PRINT);
輸出:
[
{
"date": "2021-03-09",
"fee": 119.25,
"title": "example"
},
{
"date": "2021-03-15",
"fee": 119.25,
"title": "example"
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532800.html
上一篇:從字串轉換為陣列并在php中顯示
下一篇:加號登錄GET查詢和比較URL
