如何在 PHP 中的多维数组循环中使用 str_replace()?
How to use str_replace() in a loop with multidimensional arrays in PHP?
我正在处理三个文本文件......
space.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
comma.txt
Abercrombie, Neil, Male, Tan, 2/13/1943
Bishop, Timothy, Male, Yellow, 4/23/1967
Kelly, Sue, Female, Pink, 7/12/1959
pipe.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
我必须将 Gender 中的所有 F 替换为 Female,将 M 替换为 Male,并且 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'。将它们全部替换的最佳解决方案是什么?
我建议添加两个函数来完成这项工作。
一个用于 renaming/normalizing 性别,一个用于标准化日期。
然后在循环中处理数据值时,添加对每个函数的调用。换句话说:您遍历这些值,修改它们并将它们存储在最终数组中。
function renameGender($gender)
{
if ($gender === 'F') {
return str_replace('F', 'Female', $gender);
}
if ($gender === 'M') {
return str_replace('M', 'Male', $gender);
}
}
function normalizeDate($date)
{
return str_replace('-', '/', $date);
}
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" => renameGender($data_arr[3]),
"date_of_birth" => normalizeDate($data_arr[4]),
"favorite_color" => $data_arr[5]
];
} elseif ($name == 'comma') {
$arr[] = [
"last_name" => $data_arr[0],
"first_name" => $data_arr[1],
"gender" => renameGender($data_arr[2]),
"date_of_birth" => normalizeDate($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" => renameGender($data_arr[3]),
"favorite_color" => $data_arr[4],
"date_of_birth" => normalizeDate($data_arr[5])
];
}
}
return $arr;
}
我正在处理三个文本文件......
space.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
comma.txt
Abercrombie, Neil, Male, Tan, 2/13/1943
Bishop, Timothy, Male, Yellow, 4/23/1967
Kelly, Sue, Female, Pink, 7/12/1959
pipe.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
我必须将 Gender 中的所有 F 替换为 Female,将 M 替换为 Male,并且 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'。将它们全部替换的最佳解决方案是什么?
我建议添加两个函数来完成这项工作。 一个用于 renaming/normalizing 性别,一个用于标准化日期。 然后在循环中处理数据值时,添加对每个函数的调用。换句话说:您遍历这些值,修改它们并将它们存储在最终数组中。
function renameGender($gender)
{
if ($gender === 'F') {
return str_replace('F', 'Female', $gender);
}
if ($gender === 'M') {
return str_replace('M', 'Male', $gender);
}
}
function normalizeDate($date)
{
return str_replace('-', '/', $date);
}
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" => renameGender($data_arr[3]),
"date_of_birth" => normalizeDate($data_arr[4]),
"favorite_color" => $data_arr[5]
];
} elseif ($name == 'comma') {
$arr[] = [
"last_name" => $data_arr[0],
"first_name" => $data_arr[1],
"gender" => renameGender($data_arr[2]),
"date_of_birth" => normalizeDate($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" => renameGender($data_arr[3]),
"favorite_color" => $data_arr[4],
"date_of_birth" => normalizeDate($data_arr[5])
];
}
}
return $arr;
}