【发布时间】:2016-06-24 09:10:03
【问题描述】:
我正在处理三个文本文件......
空格.txt
Kournikova Anna F F 6-3-1975 Red
Hingis Martina M F 4-2-1979 Green
Seles Monica H F 12-2-1973 Black
逗号.txt
Abercrombie, Neil, Male, Tan, 2/13/1943
Bishop, Timothy, Male, Yellow, 4/23/1967
Kelly, Sue, Female, Pink, 7/12/1959
管道.txt
Smith | Steve | D | M | Red | 3-3-1985
Bonk | Radek | S | M | Green | 6-3-1975
Bouillon | Francis | G | M | Blue | 6-3-1975
到目前为止,我已经能够将它们全部解析为一个数组。下面的输出是这样的......
Last_name, First_name, Middle_Initial, Gender, DOB, Fav_color
Kournikova Anna F F 6-3-1975 Red
Hingis Martina M F 4-2-1979 Green
Seles Monica H F 12-2-1973 Black
Abercrombie Neil Male Tan 2/13/1943
Bishop Timothy Male Yellow 4/23/1967
Kelly Sue Female Pink 7/12/1959
Smith Steve D M Red 3-3-1985
Bonk Radek S M Green 6-3-1975
Bouillon Francis G M Blue 6-3-1975
我必须将性别中的所有 F 替换为女性,将 M 替换为男性,并且 DOB 格式必须是“/”。
这是我用来解析信息的以下代码:
<?php
$space_txt = './data/input/space.txt';
$comma_txt = './data/input/comma.txt';
$pipe_txt = './data/input/pipe.txt';
$parsed_space_data = file_get_contents($space_txt);
$parsed_comma_data = file_get_contents($comma_txt);
$parsed_pipe_data = file_get_contents($pipe_txt);
$space_array = myExpldeLoopFunc('space', ' ', $parsed_space_data);
$comma_array = myExpldeLoopFunc('comma', ',', $parsed_comma_data);
$pipe_array = myExpldeLoopFunc('pipe', ' | ', $parsed_pipe_data);
$finalArray = array_merge($space_array, $comma_array, $pipe_array);
function myExpldeLoopFunc($name, $sep, $data)
{
$parsedData = explode("\r", $data);
$arr = [];
foreach ($parsedData as $data) {
$data_arr = explode($sep, $data);
if ($name == 'space') {
$arr[] = [
'last_name' => $data_arr[0],
'first_name' => $data_arr[1],
'middle_initial' => $data_arr[2],
'gender' => $data_arr[3],
'date_of_birth' => $data_arr[4],
'favorite_color' => $data_arr[5],
];
if ($data_arr[3] == 'F') {
return str_replace('F', 'Female', $arr);
} elseif ($name == 'comma') {
$arr[] = [
'last_name' => $data_arr[0],
'first_name' => $data_arr[1],
'gender' => $data_arr[2],
'date_of_birth' => $data_arr[3],
'favorite_color' => $data_arr[4],
];
} elseif ($name == 'pipe') {
$arr[] = [
'last_name' => $data_arr[0],
'first_name' => $data_arr[1],
'middle_initial' => $data_arr[2],
'gender' => $data_arr[3],
'favorite_color' => $data_arr[4],
'date_of_birth' => $data_arr[5],
];
}
}
return $arr;
}
}
以下结果删除了“Hingis Martina M F 4-2-1979 Green”和“Seles Monica H F 12-2-1973 Black”。替换它们的最佳解决方案是什么?
【问题讨论】:
-
你能展示一下最终预期数组的外观吗?
-
您能否更新您的问题以包含所有 3 个文件中的一个小样本?每个人的几行会很棒。
-
您在第 44 行缺少
$` if(data_arr[3] == 'F') {` 应该是 ` if($data_arr[3] == 'F') { `. -
您还缺少
elseif($name == 'comma') {之前的右括号 -
问题已更新。我已经尝试使用第 44 行中的 $ 但它没有解决问题。右括号已经存在。
标签: php arrays loops multidimensional-array str-replace