仅在设置变量时才添加到数组

时间:2014-10-20 14:50:29

标签: php

我有这个阵列,我这样做:

原来设置的一些var总是设置在尝试将其插入数据库时​​导致未定义的索引问题?

在将每个值添加到数组之前,有没有快速检查每个值的方法?

    $show_insert = array(
        'title' => $show_data['title'],
        'thetvdb_id' => $show_data['tvdbid'],
        'release_date' => $show_data['FirstAired'],
        'lastupdatethetvdb' => $show_data['lastupdatethetvdb'],
        'moviedb_id' => $show_data['moviedb_id'],
        'imdb_id' => $show_data['IMDB_ID'],
        'img_id' => $show_data['tvdbid'],
        'media_type' => 1,
        'status' => $show_data['status'],
        'length' => $show_data['runtime'],
        'network' => $show_data['network'],
        'overview' => $show_data['overview'],
        'seasons' => $show_data['seasons'],
        'episodes' => $show_data['episodes'],
        'homepage' => $show_data['homepage'],
        'last_airdate' => $show_data['last_air_date'],
        'vote_average' => $show_data['vote_average']
    );

3 个答案:

答案 0 :(得分:5)

您可以使用ternary operatorisset()。我们正在检查是否设置了变量和键(?之前的部分)。如果已设置,请使用该变量(?:之间的部分),如果没有,则设置为空白(:之后的部分)。

三元运算符的工作方式如下:

$variable = ( comparison ? if true : if false );

因此:

$show_insert = array(
    'title' => ( isset( $show_data['title'] ) ? $show_data['title'] : '' ),
    'thetvdb_id' => ( isset( $show_data['tvdbid'] ) ? $show_data['tvdbid'] : '' ),
    [etc.]
);

答案 1 :(得分:2)

扩展另一个答案:

我会使用一个函数来简化所有输入,同样,我会使用empty()而不是isset()但是如果你只是将它设置为一个空字符串我想这部分不是很重要。

function checkVal($val, $show_data){ 
    return empty($show_data[$val]) ? "" : $show_data[$val]; 
} 

$show_insert = array( 
    'title' => checkVal('title',$show_data), 
    'thetvdb_id' => checkVal('tvdbid',$show_data) 
);

答案 2 :(得分:0)

if (isset($show_data['title']) {
$show_insert[title] = $show_data['title'];
}

这基本上意味着如果$show_data[title]已初始化,那么它会将其添加到键'title'下的$show_insert数组中,如果尚未设置,则不会发生任何事情,因此会有没有数组键'title'

或者你可以拥有大型数组:

public function check_set($array, $variable = null, $key_name)
    if ($variable != null) {
    $array[$key_name] = $variable;
    }


check_set($show_insert, $show_data[title], $title = '"title"');