用isset检查变量是否存在?

时间:2014-05-06 12:22:36

标签: php arrays var isset

好吧,这很奇怪,我一遍又一遍地尝试使用不同的方法,但似乎没有用到我需要的东西。

我有一个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-titleno-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';
        }
    }

3 个答案:

答案 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';