【问题标题】:Better way to check if all array values by key are empty?检查所有数组值是否为空的更好方法?
【发布时间】:2018-01-15 19:58:36
【问题描述】:

我创建了一个函数来检查给定键的所有值是否为空。它工作正常,但我想知道这个功能是否可以优化或减少?

function array_key_empty($array, $key)
{
    if (is_array($array)) {
        foreach ($array as $item) {
            if (array_key_exists($key, $item)) {
                if (!empty(trim($item[$key]))) {
                    return false;
                }
            }
        }
    }

    return true;
}

示例:

$array = [
    ['code' => '', 'description' => 'Oh there is a beautiful product !', 'price' => 10],
    ['code' => '', 'description' => 'Another beautiful product', 'price' => 20],
    ['code' => '', 'description' => 'Hey where will you stop ?!', 'price' => 30]
];

array_key_empty($array, 'code'); // true because all code are empty

$array = [
    ['code' => 'Yup !', 'description' => 'Oh there is a beautiful product !', 'price' => 10],
    ['code' => '', 'description' => 'Another beautiful product', 'price' => 20],
    ['code' => '', 'description' => 'Hey where will you stop ?!', 'price' => 30]
];

array_key_empty($array, 'code'); // false because Yup...

【问题讨论】:

标签: php arrays optimization key


【解决方案1】:

你可以像这样将你的函数简化为一行:

<?php

$array = [
    ['code' => '', 'description' => 'Oh there is a beautiful product !', 'price' => 10],
    ['code' => '', 'description' => 'Another beautiful product', 'price' => 20],
    ['code' => '', 'description' => 'Hey where will you stop ?!', 'price' => 30]
];


function array_key_empty($array, $key)
{
     return is_array($array) && empty(array_map('trim', array_filter(array_column($array, $key))));
}

echo "<pre>";
print_r(array_key_empty($array, 'code'));

输出:

1

【讨论】:

    【解决方案2】:

    你可以这样做:-

    if(count(array_filter( array_map('trim',array_column($array,'code'))))==0){
      echo "all values are empty";
    }
    

    输出:-https://eval.in/842810

    【讨论】:

    • 谢谢!但是我需要修剪每个值,在这种情况下,如果一个值包含它认为不为空的空间。
    • @Damosse31 让我也补充一下
    • @Damosse31 立即查看
    • 真棒减少线条!谢啦 !我只需要检查是否给出了数组以避免警告,但它是完美的!
    • @Damosse31 检查,如果有任何问题,请告诉我,否则不要忘记将答案标记为已接受。谢谢
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    相关资源
    最近更新 更多