我有兩個數組,第一個是從函數獲得的結果,第二個包含默認值。我想用第二個數組中的值替換第一個數組中的空值。用默認值替換數組中的空值
$result = [
'NOTNULL',
null,
null,
null,
null
];
$defaults = [
'default1',
'default2',
[
null,
null,
null
]
];
# transforming $result array (to have the same form as $defaults array)
array_splice($result, 2, 3, [array_slice($result, 2)]);
$result = array_replace_recursive(
$default,
$result
);
輸出:
Array (
[0] => NOTNULL
[1] => null
[2] => Array (
[0] => Array()
[1] => null
[2] => null
)
)
預計:
Array (
[0] => NOTNULL
[1] => default2
[2] => Array (
[0] => null
[1] => null
[2] => null
)
);
我知道我得到的結果,因爲array_replace_recursive
取代了通過數組中的元素到第一個數組遞歸,但我怎麼只能改變不是空的值?
也許我應該這樣做?
$result[0] = (array_key_exists(0, $result) || $result[0] === null) ? $defaults[0] : $result[0];
...數組中的每一個關鍵?我想保留兩個數組中爲空的空值。在這一刻,這是我找到的唯一解決方案,但它不是非常優雅...
我怎樣才能得到預期的結果?我沒有任何想法。
從功能爲什麼要退空?如果你知道你將要進行數組比較,那麼使用array_push會更有意義嗎? – iamthereplicant
您應該再次重構您的函數(登錄) –
@iamthereplicant,因爲我的$ result數組必須與'$ defaults'具有相同的形式,而空值更易於拼接。 'array_push'在數組的末尾添加一個元素,不是?我會嘗試的。 – guest459473