【问题标题】:How to auto-generate array key values if they are null (from a query)如果它们为空,如何自动生成数组键值(来自查询)
【发布时间】:2014-06-15 18:14:45
【问题描述】:

我的应用程序使用了许多数组和许多 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 中的姓氏

这实际上发生了,因为没有设置数组。也就是说,surname 值为空。

我的麻烦:

我必须使用这种方法,但我不能使用这样的方法(出错):

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

我的问题

如您所见,这不是错误,但不应出现“通知”(因为未定义 INDEX...)。有没有办法从那个查询中默认设置所有数组键,即使值是NULL,比如“姓”字段?那将是最快的解决方案。我一直在寻找这个,但没有得到任何答案。

谢谢!

【问题讨论】:

  • 这是不正常的,即使db中的surename不存在,应该赋值为空
  • 您是否在遍历查询结果集?您应该使用$array[0]['name'] 等等,其中0 是您正在解析的行的索引

标签: php mysql arrays multidimensional-array


【解决方案1】:

您应该对结果进行迭代并根据需要对其进行格式化。像这样的:

$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);    

}   

【讨论】:

    【解决方案2】:

    默认情况下无法设置 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);
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多