对于类似的东西,是否有更短的解决方案?
$manufacturer = array();
if(!is_null($params->get('name'))){
$manufacturer['name'] = $params->get('name');
}
if(!is_null($params->get('link'))){
$manufacturer['link'] = $params->get('link');
}
if(!is_null($params->get('description'))){
$manufacturer['description'] = $params->get('description');
}
...
因此,如果值不为null,则只应使用值设置数组的键。这有点短,但使用此解决方案,键将存在值NULL。但是当值为NULL时,它们甚至不应该存在:
$manufacturer = array(
'name' => !is_null($params->get('name')) ? $params->get('name') : null,
'link' => !is_null($params->get('link')) ? $params->get('link') : null,
'description' => !is_null($params->get('description')) ? $params->get('description') : null
);
编辑:
它应该适用于多维数组,数组键和参数键可能会有所不同
答案 0 :(得分:3)
$keys = ['name', 'link', ....];
foreach ($keys as $key) {
if(!is_null($params->get($key))){
$manufacturer[$key] = $params->get($key);
}
}
答案 1 :(得分:2)
对于@u_mulder foreach
和@Nono array_filter
解决方案,它们只适用于简单数组,它们不会从多维数组中删除空值,
试试这个递归函数:
<?php
/**
just keep your array like this:
$manufacturer = array(
'name' => $params->get('name'),
'link' => $params->get('link'),
'description' => $params->get('description'),
'attribute' => array (
'street' => $params->get('street'),
...
)
...
);
**/
$manufacturer = [
'name' => 'yoeunes',
'link' => null,
'description' => 'fake description',
'attribute' => [
'street' => null,
'city' => 'Marrakech',
],
];
function array_remove_null($array)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
$array[$key] = array_remove_null($array[$key]);
}
if (is_null($array[$key])) {
unset($array[$key]);
}
}
return $array;
}
echo "<pre>";
print_r(array_remove_null($manufacturer));
<强>输出:强>
Array
(
[name] => yoeunes
[description] => fake description
[attribute] => Array
(
[city] => Marrakech
)
)
答案 2 :(得分:0)
foreach解决方案是可行的,但由于数组键和params键可能会有所不同,因为我有另一个数组在这个数组中有值,这可能是一个更好的解决方案,或者你怎么看?
$manufacturer = array(
'name' => !is_null($params->get('name')) ? $params->get('name') : false,
'link' => !is_null($params->get('link')) ? $params->get('link') : false,
'description' => !is_null($params->get('description')) ? $params->get('description') : false,
'attribute' => array (
'street' => !is_null($params->get('street')) ? $params->get('street') : false,
...
)
...
);
$manufacturer = array_filter($manufacturer);
array_filter(没有回调)将删除所有带有false的键。 (可能只要我的键没有布尔值。如果是这样,你可以用NULL做同样的事情,然后使用array_filter的回调)