【问题标题】:Fill empty values in array with values from other array用其他数组中的值填充数组中的空值
【发布时间】:2016-03-22 15:09:36
【问题描述】:

我在 mysql 中有两行和这些查询:

SELECT * FROM `fruits_colors` WHERE `name` = "default"
SELECT * FROM `fruits_colors` WHERE `name` = "example"

我明白了:

//result from first query    
$default_row = array(
    'banana' => 'yellow',
    'apple' => 'red',
    'grape' => 'green',
    'blueberry' => 'blue'
    'raspberry' => 'red'
);

//result from second query 
$example_row = array(
    'banana' => 'yellow',
    'apple' => 'GREEN',
    'grape' => '',
    'blueberry' => 'blue'
    'raspberry' => ''
);

所以,现在我想用默认值 ($default_row) 填充 $example_row 中的所有空值,但不替换那些不为空的值。所以我应该得到:

$example_row = array(
    'banana' => 'yellow',
    'apple' => 'GREEN', // keep original from this array
    'grape' => 'green', // filled from $default_row
    'blueberry' => 'blue'
    'raspberry' => 'red'// filled from $default_row
);

我知道我可以使用 $example_row 进行 foreach,检查每个键,如果值为空,则使用其他数组中的值进行设置。但是,有没有更优雅的更短的方法来做到这一点?

  1. 我可以将这些数组与一些内置的 PHP 函数连接起来吗?
  2. 也许我可以直接在 SQL 查询中执行此操作?

问候

【问题讨论】:

    标签: php mysql sql arrays pdo


    【解决方案1】:

    试试这个解决方案。

    $return = array();
    foreach($example_row as $k => $v) {
        if(empty($v) || ($v == "")) {
            $return[$key] = $default_row[$key];
        } else {
            $return[$key] = $v;
        }
    }
    
    var_dump($return);
    

    【讨论】:

    • 如果$example_row中的值为空,则设置为$default_row中的值。
    【解决方案2】:

    你可以试试这样的:

    SELECT COALESCE(NULLIF(`name`,''), SELECT `name` FROM fruits_colors
     WHERE `name` = "default")
    FROM fruits_colors
     WHERE `name` = "example"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      相关资源
      最近更新 更多