如果它们为null(从查询中),如何自动生成数组键值

时间:2014-06-15 18:14:45

标签: php mysql arrays multidimensional-array

我的应用程序使用许多数组和许多SQL查询。我的问题在这段代码中:

我执行此查询:

$select = "SELECT name, surname FROM table"

$query  = $connection->query($select);
$array  = $query->fetchAll(PDO::FETCH_ASSOC);

然后,我将值传递给这样的数组:

        $array_dump= array(
            array(
                array('name' => 'name'),
                array('content' => $array['name'])
            ),
            array(
                array('name' => 'surname'),
                array('content' => $array['surname'])
            ),
          )

事实上,如果你没有设置error_reporting(),这可以正常工作。如果我打开,我会收到此错误:

  

注意:未定义的索引:第27行的C:\ AppServ \ www \ test.php中的姓氏

由于数组未设置,实际上会发生这种情况。换句话说,姓氏值为空。

我的麻烦:

我必须使用这种方法,但我不能使用这样的东西(得到错误):

array(
    array('name' => 'name'),
    array('content' => (isset($array['surname']) ? $array['surname'] : '')
)

我的问题

如你所见,这是一个错误,但是那个"注意"不应该出现(因为INDEX没有定义......)。有没有办法在默认情况下从查询设置所有数组键,即使值为NULL,例如" surname"领域?那将是最快的解决方案。我一直在寻找这个,但没有得到答案。

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该迭代结果并根据需要格式化它们。像这样:

$array = $query->fetchAll(PDO::FETCH_ASSOC);

$array_dump = array();

foreach ( $array as $person ) {

    $tempArray = array();

    array_push($tempArray, array(
        'name' => 'name',
        'content' => $person['name']
    ));

    array_push($tempArray, array(
        'name' => 'surname',
        'content' => $person['surname']
    ));

    array_push($array_dump, $tempArray);    

}   

答案 1 :(得分:0)

默认情况下,无法设置 ALL 可能的数组键。但是,您可以基于预定义的键集构建默认值数组,并将其与主数组合并。不知怎的,这样:

$a_keys = array('name', 'surname');
$a_defaults = array_combine($a_keys, array_fill(0, count($a_keys), 0));
$array = array_merge($a_defaults, $array);
...