Php 从条件内的关联数组中删除特定键

Php 从条件内的关联数组中删除特定键,php,arrays,associative-array,Php,Arrays,Associative Array,我遇到了一种编码情况,在这种情况下,我更希望保持某种条件尽可能紧凑: // $data and $control are arrays if($data==$control || ($someBool && $data==$control)) return $c; 当然,这样的情况毫无意义。我的目标是在与$data进行比较之前,在我的条件的最后一部分中从$control中删除一个键 当然可以这样做: function chopByKey(array $arr, $key

我遇到了一种编码情况,在这种情况下,我更希望保持某种条件尽可能紧凑:

// $data and $control are arrays
if($data==$control || ($someBool && $data==$control))
    return $c;
当然,这样的情况毫无意义。我的目标是在与
$data
进行比较之前,在我的条件的最后一部分中从
$control
中删除一个键

当然可以这样做:

function chopByKey(array $arr, $key){
    if(!isset($arr[$key]))
        return $arr;
    unset($arr[$key]);
    return $arr;
}
function chopByKey(array $arr, $key){
  if(array_key_exists($key,$arr)){
    unset($arr[$key]);
    return $arr;
  }
  // depending on your desired result, either return $arr or return false here.
  return $arr;
}
并重写条件:

if($data==$control || ($someBool && $data==chopByKey($control, 'someKey') ))
    return $c;
请注意

我正在寻找一个可以在我的条件下使用的解决方案,而不是任何需要在条件或自定义函数的定义之前进行任何额外步骤的解决方案,无论它是否匿名

我的问题是

在不定义新的自定义函数的情况下,有没有更优雅的方法来实现这一点

如果是,怎么做?

我要做的是:

$checkControl = $control;
if ($someBool) unset($checkControl['somekey']);

if ($checkControl == $data) {
它需要额外的两行,但整体可读性很强

但这并不能真正回答你的问题。。。如果要将其放在一行中,可能需要检查
array\u diff\u assoc()


它的可读性不强,可能效率也不高。

像这样的东西可能看起来很优雅:

<?php
    $data = array(
    "one" => "1",
    "two" => "2"
    );
    $control  = array(
    "one" => "1",
    "two" => "2",
    "three" => "3"
    );
    if ($data==$control || ($someBool && $data==array_slice($control,0,count($control)-1))
    {
        return $c;
    }
?>

我想到了以下几行:

$control = array('hello' => 'world', 'foo' => 'bar');
$data = array('hello' => 'world');
$someBool = true;

if ($data == $control || $someBool && $data == array_diff_key($control, array('foo' => 0))) {

副作用是,
$control
不受条件的修改。

至于您的函数,我会这样做:

function chopByKey(array $arr, $key){
    if(!isset($arr[$key]))
        return $arr;
    unset($arr[$key]);
    return $arr;
}
function chopByKey(array $arr, $key){
  if(array_key_exists($key,$arr)){
    unset($arr[$key]);
    return $arr;
  }
  // depending on your desired result, either return $arr or return false here.
  return $arr;
}

收尾怎么样?这通常是一个好主意,但鉴于这不是一个过于具体的举动,我不认为使用匿名函数是一个好办法。不过我会修改我的问题,让我的观点更清楚。谢谢!在我看来,你所做的是一个非常紧凑和高效的方式-为什么你还想要别的?代码可读性很好,它完成了任务…?我只是在尝试学习。多年来,我一步一步地在PHP中发现了以前对我隐藏的珍宝和技巧。我希望在这种情况下也能有类似的发现。非常好的方法!也谢谢你的警告。我不是在寻找效率或可读性。考虑到这些标准,这似乎是一个好的解决方案。好问题。实际上,我必须尝试一些方法并查看
array\u diff\u assoc()
的PHP手册。我几乎不用它。你一定是在开玩笑。很棒的方法<代码>$control
无论如何都不应修改。无论如何,我都不会通过引用将其传递给我的helper函数。