【问题标题】:Validate matching array keys验证匹配的数组键
【发布时间】:2016-03-29 19:58:13
【问题描述】:

鉴于以下数组,我如何优雅地验证选项、价格和成本数组是否具有匹配的键值?

Array
(
    [option] => Array
        (
            [1] => C
            [2] => M
            [3] => G
        )

    [price] => Array
        (
            [1] => 100
            [2] => 200
            [3] => 300
        )

    [cost] => Array
        (
            [1] => 0
            [2] => 0
            [3] => 0
        )
)

我想过在每个数组上运行 foreach(array as key => values) 并将这些值发送到另一个数组,然后使用 if(!in_array) ,但必须有更好的方法来做到这一点。

【问题讨论】:

  • 什么构成匹配?例如,如果option[1] => 100,那会匹配price 吗?如果选项改为[2] => 100 会怎样? cost 有 3 个 0——匹配吗?这个问题可能更适合codereview.stackexchange.com

标签: php arrays validation


【解决方案1】:

听起来您想要相同的键,因为与数组中的值没有关联。如果是这样,您可以在每个子数组的键上运行差异:

if(call_user_func_array('array_diff_key', $array)) {
    // not the same keys
} else {
    // same keys
}
  • call_user_func_array() 将数组作为参数数组并将每个参数传递给 array_diff_key()
  • 如果结果不为空则存在差异
  • 如果结果为空,则没有差异

【讨论】:

    【解决方案2】:

    我建议以这种方式使用数组:

    大批 ( [选项] => 数组 ( [C] => 数组 ( [价格] => 100 [成本] => 0 ) [M] => 数组 ( [价格] => 200 [成本] => 0 ) [G] => 数组 ( [价格] => 300 [成本] => 0 ) ) )

    PHP 代码:

    $product = array("option" => array("C" => array("price" => 100, "cost" => 0), "M" => array("price" => 200, "cost " => 0), "G" => 数组("价格" => 300, "成本" => 0)));

    【讨论】:

    • 这与问题有什么关系?我为什么要使用这种结构?
    • 如果您有某些选项(例如 C、M 和 G)具有不同的价格和成本,这种结构会更方便,我认为这是您的想法。如果我误解了您的问题,我深表歉意。
    • 但是您不知道使用数组的上下文。数组具有所描述的结构是有原因的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2019-10-21
    • 2012-08-03
    • 2020-03-10
    相关资源
    最近更新 更多