用其他数组中的值填充数组中的空值

问题描述 投票:0回答:3

我在 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
3个回答
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);

1
投票

你可以尝试这样的事情:

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

0
投票

为了获得最佳效率/直接性,请使用带有 JOIN 子句的查询,并仅在 SELECT 子句中写入条件。 最好的模式设计是在 INSERTing 数据时使用 NULL 而不是空值,然后您可以简单地 COALESCE 到默认值而不是冗长的 CASE 语句。

SELECT
    CASE ex.banana WHEN != '' THEN ex.banana ELSE def.banana END banana,
    CASE ex.apple WHEN != '' THEN ex.apple ELSE def.apple END apple,
    CASE ex.grape WHEN != '' THEN ex.grape ELSE def.grape END grape,
    CASE ex.blueberry WHEN != '' THEN ex.blueberry ELSE def.blueberry END blueberry,
    CASE ex.raspberry WHEN != '' THEN ex.raspberry ELSE def.raspberry END raspberry
FROM fruits_colors ex
LEFT JOIN fruits_colors def ON def.name = 'default'
WHERE ex.name = 'example'

如果您想使用 PHP,请将空字符串替换为查找数组中的默认值。 演示

$result = [];
foreach ($example_row as $col => $val) {
    $result[$col] = $val ?: $default_row[$col];
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.