我有一个description.txt
文件,其内容的格式为:
filename|title|description
现在,对于该文件的每一行,我做了:
$parts = explode('|', $line);
$this->info[$parts[0]]['title'] = isset($parts[1]) ? $parts[1] : 'no-title';
$this->info[$parts[0]]['description'] = isset($parts[2]) ? $parts[2] : 'no-description';
但是,因为description.txt
文件中的某些行没有标题&描述,但仅限文件名
我认为检查这些缺失部分的存在是否可行,并且在这种情况下回显no-title
和no-description
分别。但上面的代码并没有产生这些字符串,我也没有看到任何回声。
我也试过了array_key_exists('1', $parts)
,没有成功。试过is_null
没有成功。
我不知道为什么这不起作用。
只是要添加,如果没有管道分隔的部分丢失,代码工作正常,所以这只是如何捕获那些不存在的问题。
在var_dump
上执行$parts[1]
,对于文件名后面没有任何内容的行null
如果第一行只是文件名,则为var_dump($parts); die;
的输出:
array (size=1)
0 => string '10172608_1425353644382351_9063428062883749844_n.jpg
' (length=52)
例如在第一行:
filename
filename|title|description
我设法使其与!empty($parts[1])
检查一起使用,但之后我必须在我的description.txt
文件中:
filename|||
让它工作,我想在没有标题或说明时跳过那些额外的管道。
这是整个循环:
如果description.txt
文件如下,则此方法有效:
filename|||
表示不包含标题或说明的行。
if($handle = @fopen($this->path . "/" . $this->desc_file, "r")) {
while (($line = fgets($handle)) !== false) {
// process each line and put title & desc into an info array
$parts = explode('|', $line);
$this->info[$parts[0]]['title'] = ! empty($parts[1]) ? $parts[1] : 'no-title';
$this->info[$parts[0]]['description'] = ! empty($parts[2]) ? $parts[2] : 'no-description';
}
}
答案 0 :(得分:1)
您需要修剪从文件中读取的行,因为它们上有换行符。
我还将所有细节存储在'info'数组中......
if ($handle = fopen(__DIR__ ."/description.txt", "r")) {
while (($line = fgets($handle)) !== false) {
$line = trim($line);
// process each line and put title & desc into an info array
$parts = explode('|', $line);
$fileDetails = array();
$fileDetails['filename'] = ! empty($parts[0]) ? $parts[0] : 'no-filename';
$fileDetails['title'] = ! empty($parts[1]) ? $parts[1] : 'no-title';
$fileDetails['description'] = ! empty($parts[2]) ? $parts[2] : 'no-description';
$this->info[] = $fileDetails;
}
fclose($handle);
答案 1 :(得分:0)
检查 - 它有帮助
$parts = explode('|', $line);
$no_title = 'no-title';
if($parts[1]){
$no_title = $parts[1];
}
$no_description = 'no-description';
if($parts[2]){
$no_description = $parts[2];
}
$this->info[$parts[0]]['title'] = $no_title;
$this->info[$parts[0]]['description'] = $no_description;
例如
$line = 'filename';
$no_title = 'no-title';
if($parts[1]){
$no_title = $parts[1];
}
$no_description = 'no-description';
if($parts[2]){
$no_description = $parts[2];
}
echo $no_title .' ';
echo $no_description;
输出:
no-title no-description
答案 2 :(得分:0)
请查看数组function.count的大小
$parts = explode('|', $line);
$this->info[$parts[0]]['title'] = count($parts)==1 : 'no-title';
$this->info[$parts[0]]['description'] = count($parts)==2 : 'no-description';