使用 PHP 检查数组中的数组是否为空

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

我有以下数组,需要使用 PHP 检查其中是否有任何值。

Array (
    [amazon_uk] => Array(
        [retailer_link_or_sku] => 
        [affiliate_url] => 
    )
    [awd_it] => Array(
        [retailer_link_or_sku] => 
        [affiliate_url] => 
    )
    [ccl_online] => Array(
        [retailer_link_or_sku] => 
        [affiliate_url] => 
    )
)

例如,我希望上面的数组返回空,因为 [retailer_link_or_sku] 或 [affiliate_url] 数组键都没有值。

但是,我希望以下数组返回非空,因为其中有几个键具有“value123”:

Array (
    [amazon_uk] => Array(
        [retailer_link_or_sku] => value123
        [affiliate_url] => 
    )
    [awd_it] => Array(
        [retailer_link_or_sku] => 
        [affiliate_url] => 
    )
    [ccl_online] => Array(
        [retailer_link_or_sku] => value123
        [affiliate_url] => 
    )
)

我已经尝试过 (empty($array)), (!array_filter($array)), sizeof($array) 但我认为因为主数组内部有一些值,例如[amazon_uk] & [awd_it] & [ccl_online],它们都返回非空,即使它们本身都没有值。

任何帮助将不胜感激。谢谢!

php arrays
1个回答
0
投票

您可以使用递归来迭代所有条目。一旦设置了值,就返回 true。

$arrayWithValues = [
    'amazon_uk'  => [
        'retailer_link_or_sku' => 'value123',
        'affiliate_url'        => ''
    ],
    'awd_it'     => [
        'retailer_link_or_sku' => '',
        'affiliate_url'        => ''
    ],
    'ccl_online' => [
        'retailer_link_or_sku' => 'value123',
        'affiliate_url'        => ''
    ]
];

$arrayWithoutValues = [
    'amazon_uk'  => [
        'retailer_link_or_sku' => '',
        'affiliate_url'        => ''
    ],
    'awd_it'     => [
        'retailer_link_or_sku' => '',
        'affiliate_url'        => ''
    ],
    'ccl_online' => [
        'retailer_link_or_sku' => '',
        'affiliate_url'        => ''
    ]
];

function hasValue(array $array): bool
{
    foreach ($array as $value) {
        if (is_array($value)) {
            if (hasValue($value)) {
                return true;
            }
        }
        elseif ('' !== $value) {
            return true;
        }
    }

    return false;
}

var_dump(hasValue($arrayWithValues));     // true
var_dump(hasValue($arrayWithoutValues));  // false
© www.soinside.com 2019 - 2024. All rights reserved.