我是PHP的新手并且正在努力获得一些结果,但未能实现我的目标。我有包含这样的数据的文本文件,
APAC|AU|enable|SYD1925|8|20150929|WORKING
APAC|AU|disable|ADL7235|3|20120123|RESIGNED
APAC|NZ|disable|NZ1356|6|20110123|RESIGNED
APAC|NZ|enable|NZ1356|3|20130123|WORKING
我正在尝试搜索“AU”&&这个文本“启用”,逐行,我有点成功。这是我的代码示例;
public function scan1()
{
$file = FCPATH.'uploads/example.txt';
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
$search1 = "AU";
$search2 = "enable";
$lines = file($file);
foreach($lines as $line)
{
if(stristr($line,$search1) && stristr($line,$search2))
echo $line;
}
}
现在,我正在尝试爆炸/拆分输出数据并分配变量/数组以保存在数据库中,但我没有这样做,有人可以帮助或给我一些方向来实现这一点。谢谢
答案 0 :(得分:0)
首先,使用file_get_contents获取文件内容:
$str = file_get_contents(FCPATH.'uploads/example.txt');
然后,使用正则表达式(preg_match_all)查找您要查找的所有文本部分:
preg_match_all("/APAC\\|(\w{2}\\|\w+)/", $str, $matches);
然后调整数组,使'AU'和'enabled'分开(array_map,explode):
$matches = array_map(function ($v) { return explode('|', $v); }, $matches[1]);
所以,print_r($matches);
返回:
Array
(
[0] => Array
(
[0] => AU
[1] => enable
)
[1] => Array
(
[0] => AU
[1] => disable
)
[2] => Array
(
[0] => NZ
[1] => disable
)
[3] => Array
(
[0] => NZ
[1] => enable
)
)
最后,foreach循环:
foreach($matches as $k => $kv)
{
$search1 = $kv[0]; // AU
$search2 = $kv[1]; // enabled
}
答案 1 :(得分:0)
Please show us your_table scheme. If '$db' is a handle of the db connection :
foreach($lines as $line)
{
if(stristr($line,$search1) && stristr($line,$search2))
{
$arr = explode("|", $line);
$query = "INSERT INTO your_table VALUES ('".$arr[0]."', '".$arr[1]."', '".$arr[2]."', '".$arr[3]."', '".$arr[4]."', '".$arr[5]."')";
$db->query($query);
}
}
答案 2 :(得分:0)
这可以按预期工作:
public function scan1()
{
$file = FCPATH.'uploads/example.txt';
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
$search1 = "AU";
$search2 = "enable";
$lines = file($file);
foreach($lines as $line)
{
if(strpos($line,$search1) !== false && strpos($line,$search2) !== false)
echo $line;
}
}
使用strpos功能进行检测。