【问题标题】:how to check specific keys and values in a multi-dimensional php array, exist and have values?如何检查多维php数组中的特定键和值,存在并具有值?
【发布时间】:2016-05-19 12:07:57
【问题描述】:

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

Array (
[1] => Array
  ([system] => A [serial]=> 12345L)
[3] => Array
  ([system] => B [serial] =>)
[4] => Array
  ([system] => D [serial] => 56789L [licence] => ABCD1-EFGH2-IJKL3-MNOP4-QRST5)
[5] => Array
  ([serial] => 98765L [licence] => 1234567890)
)

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

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

所以理论上我的示例意味着 1 和 4 是有效的,但 3 不是因为它缺少序列值,也不是 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>";
    }
  }
}

有人可以就我如何改进这一点提供任何建议吗?

【问题讨论】:

  • 你能提供你需要的输出吗?
  • 您的问题解决了吗? :)

标签: php arrays multidimensional-array key


【解决方案1】:

这应该可行:

$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);

【讨论】:

  • 这段代码很棒,因为它可以从数组中删除不正确的数组,但是在这种情况下,我希望能够在用户没有提交系统和序列号。不过,我稍后可能会在我的项目中使用您的出色代码!
  • 感谢您对我尝试制作的更简单版本的帮助。我已经可以考虑使用与上述类似的方法对我的代码的其他部分进行一些改进。
【解决方案2】:

不再需要foreach,只需做这样的事情

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>";
}
}

【讨论】:

  • 感谢您的输入,我没有意识到我可以使用 key() 函数。但是,这目前对我来说是一个错误。即: PHP 致命错误:不能在写上下文中使用函数返回值,它指的是第一个 if 行。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2018-07-02
  • 2013-10-25
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2018-04-16
  • 2011-12-27
相关资源
最近更新 更多