如何检查多维php数组中的特定键和值、存在值和有值?

如何检查多维php数组中的特定键和值、存在值和有值?,php,arrays,multidimensional-array,key,Php,Arrays,Multidimensional Array,Key,我基于post值存储了一个数组,其中存储了多个数组,示例如下(键值可能因用户输入而异): 注意:我不确定是否值得一提,但对于上面的示例,数组键是1345,但它可能是123456或56,等等 我想检查每个数组是否都有一个系统键和一个串行键,并且这些键都有一个值。许可证密钥是可选的 所以在理论上,我的例子意味着1和4是有效的,但3不是因为它缺少了serial的值,5也不是,因为它没有系统的键 我有点不知所措,因为它首先是在一个数组中。然而,我已经做了下面这是非常基本的,我可以想象相当低效 forea

我基于post值存储了一个数组,其中存储了多个数组,示例如下(键值可能因用户输入而异):

注意:我不确定是否值得一提,但对于上面的示例,数组键是1345,但它可能是123456或56,等等

我想检查每个数组是否都有一个系统键和一个串行键,并且这些键都有一个值。许可证密钥是可选的

所以在理论上,我的例子意味着1和4是有效的,但3不是因为它缺少了serial的值,5也不是,因为它没有系统的键

我有点不知所措,因为它首先是在一个数组中。然而,我已经做了下面这是非常基本的,我可以想象相当低效

foreach($sys_arr as $k => $v) {
  if (is_array($v) == true) {
    foreach($v as $key => $value) {
      if ($key = "system" && $value == null) {
        echo "Error: System has no value<br>";
      } elseif ($key = "serial" && $value == null) {
        echo "Error: Serial has no value<br>";
      } else {
        echo "Both keys have values<br>";
      }
    }
    if (!array_key_exists("system", $v)) {
      echo "Error: No System Key<br>";
    } elseif (!array_key_exists("serial", $v)) {
      echo "Error: No Serial Key<br>";
    } else {
      echo "Both Keys exist!<br>";
    }
  }
}
foreach($sys\u arr as$k=>v){
if(is_数组($v)==true){
foreach($v作为$key=>$value){
如果($key=“system”&&$value==null){
echo“错误:系统没有值
”; }elseif($key=“serial”&&&$value==null){ echo“错误:序列号没有值
”; }否则{ echo“两个键都有值
”; } } 如果(!array_key_存在(“system”,$v)){ echo“错误:没有系统键
”; }elseif(!array_key_exists(“serial”,$v)){ echo“错误:没有串行键
”; }否则{ 回显“两个键都存在!
”; } } }
有人能就我如何改进这一点提出建议吗?

这应该可以:

$array = [
    ['system' => 'A', 'serial' => '1232'],
    ['system' => 'B', 'serial' => ''],
    ['system' => 'D', 'serial' => '1232', 'licence' => '123123'],
    ['serial' => '&2312321', 'licence' => '123123']
];

$valid = [];

foreach ($array as $key => $value) {
    if (!isset($value['system'])) {
        echo 'Error: No System Key<br>';
        continue;
    }
    if (!isset($value['serial'])) {
        echo 'Error: No Serial Key<br>';
        continue;
    }

    if (empty($value['system'])) {
        echo 'Error: System has no value<br>';
        continue;
    }
    if (empty($value['serial'])) {
        echo 'Error: Serial has no value<br>';
        continue;
    }
    $valid[] = $value;
}

var_dump($valid);
$array=[
['system'=>'A','serial'=>'1232'],
['system'=>'B','serial'=>'',
[“系统”=>“D”,“序列”=>“1232”,“许可证”=>“123123”],
['serial'=>'&2312321','license'=>'123123']
];
$valid=[];
foreach($key=>$value的数组){
如果(!isset($value['system'])){
echo“错误:没有系统键
”; 继续; } 如果(!isset($value['serial'])){ echo“错误:没有串行键
”; 继续; } if(空($value['system'])){ echo“错误:系统没有值
”; 继续; } if(空($value['serial'])){ echo“错误:序列号没有值
”; 继续; } $valid[]=$value; } var_dump($有效);
无需再次访问,只需执行以下操作

foreach($sys_arr as $k => $v) 
{


  if (key($v['system']) = "system" && $v['system'] == null)
  {
    echo "Error: System has no value<br>";
  } 
  elseif (key($v['serial'])= "serial" && $v['serial'] == null) 
  {
    echo "Error: Serial has no value<br>";
  } 
  else
  {
    echo "Both keys have values<br>";
  }

if (!array_key_exists("system", $v)) 
{
  echo "Error: No System Key<br>";
} 
elseif (!array_key_exists("serial", $v))
{
  echo "Error: No Serial Key<br>";
}
else 
{
  echo "Both Keys exist!<br>";
}
}
foreach($sys\u arr as$k=>v)
{
if(key($v['system'])=“system”&&$v['system']==null)
{
echo“错误:系统没有值
”; } elseif(key($v['serial'])=“serial”&&$v['serial']==null) { echo“错误:序列号没有值
”; } 其他的 { echo“两个键都有值
”; } 如果(!array_key_存在(“system”,$v)) { echo“错误:没有系统键
”; } elseif(!array_key_exists(“serial”,$v)) { echo“错误:没有串行键
”; } 其他的 { 回显“两个键都存在!
”; } }
您能提供您需要的输出吗?您的问题解决了吗?:)这段代码非常好,因为它可以从数组中删除不正确的数组,但是在本例中,我希望能够在用户未提交系统号和序列号时向用户显示错误。不过,我以后可能会在我的项目中使用你的精彩代码!谢谢你的帮助,把我想做的东西简化了很多。我已经可以使用与上述类似的方法对代码的其他部分进行一些改进。感谢您的输入,我没有意识到我可以使用key()函数。然而,这导致了我目前的一个错误。这是:PHP致命错误:无法在引用第一个if行的写上下文中使用函数返回值。
foreach($sys_arr as $k => $v) 
{


  if (key($v['system']) = "system" && $v['system'] == null)
  {
    echo "Error: System has no value<br>";
  } 
  elseif (key($v['serial'])= "serial" && $v['serial'] == null) 
  {
    echo "Error: Serial has no value<br>";
  } 
  else
  {
    echo "Both keys have values<br>";
  }

if (!array_key_exists("system", $v)) 
{
  echo "Error: No System Key<br>";
} 
elseif (!array_key_exists("serial", $v))
{
  echo "Error: No Serial Key<br>";
}
else 
{
  echo "Both Keys exist!<br>";
}
}