如何从php中的文本文件中提取特定文本?

时间:2018-07-05 15:24:24

标签: php arrays loops

我在从文本文件中提取特定文本时遇到困难。我尝试了许多不同的方法,例如使用fopen或file打开文件,但这不会允许我使用任何字符串函数。因此,我决定使用file_get_contents并使用以下字符串方法提取所需的文本:

    <?php  

        $data = [];  
        $file =   
        file_get_contents("data.txt", 0, NULL, 148);  
             list($id, $data_names) = preg_split('[:]', $file);  
             array_push($names, $data_names);  
             echo $emails[0];  

    ?>  

我使用preg_split将所需的文本分割为一个特定的字符(:),然后将数据放入数组中。哪条线适用于第一行,但我不知道如何在其余的行中执行该操作,我尝试了while循环,但最终以无限循环结束。

data.txt的格式如下:

1:hannah.Smith
2:Bob.jones
3:harry.white
....

任何有关如何执行此操作或更好方法的建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

有一个功能。这不是CSV,但请更改定界符。只需获取名称:

$handle = fopen("data.txt", "r"));
while(($line = fgetcsv($handle, 0, ":")) !== FALSE) {
    $names[] = $line[1];
}

要通过ID为名称编制索引:

while(($line = fgetcsv($handle, 0, ":")) !== FALSE) {
    $names[$line[0]] = $line[1];
}

要获取多维数组中的ID和名称,请使用:

while(($names[] = fgetcsv($handle, 0, ":")) !== FALSE) {}

答案 1 :(得分:0)

好吧,您没有将file_get_contents的返回值分配给变量。因此文件的内容没有被使用。

您可以使用file功能。它将文件的内容读取到数组。数组的每个元素都是文件中的一行。然后,您可以遍历数组并解析每一行。例如:

public void countDownStart() {
    handler = new android.os.Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            handler.postDelayed(this, 1000);
            try {
                SimpleDateFormat dateFormat = new SimpleDateFormat(
                        "yyyy-MM-dd");
                // Please here set your event date//YYYY-MM-DD
                Date futureDate = dateFormat.parse("2018-11-4");
                Date currentDate = new Date();
                if (!currentDate.after(futureDate)) {
                    long diff = futureDate.getTime()
                            - currentDate.getTime();
                    long days = diff / (24 * 60 * 60 * 1000);
                    diff -= days * (24 * 60 * 60 * 1000);
                    long hours = diff / (60 * 60 * 1000);
                    diff -= hours * (60 * 60 * 1000);
                    long minutes = diff / (60 * 1000);
                    diff -= minutes * (60 * 1000);
                    long seconds = diff / 1000;
                    txtDay.setText("" + String.format("%02d", days));
                    txtHour.setText("" + String.format("%02d", hours));
                    txtMinute.setText(""
                            + String.format("%02d", minutes));
                    txtSecond.setText(""
                            + String.format("%02d", seconds));
                } else {
                    textViewGone();

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    handler.postDelayed(runnable, 1 * 1000);
}

public void textViewGone() {


}`