PHP - 检查是否存在一个或多个数组字段

时间:2010-09-09 12:09:56

标签: php arrays

我有一个这样的数组:

array('prefix1_field' => 34,
      'prefix1_anotherfield' => 345,
      'prefix1_andanotherfield' => 565,

      'anotherprefix_field' => 34,
      'anotherprefix_anotherfield' => 345,
      'anotherprefix_andanotherfield' => 565,

      'prefix3_anotherprefix_field' => 34, // <- 'anotherprefix' here should be ignored
      'prefix3_anotherfield' => 345,
      'prefix3_andanotherfield' => 565,
      ...
);

如何创建一个函数来检查此数组中是否有以prefix1_开头的字段?

5 个答案:

答案 0 :(得分:2)

function check_array_key_prefix_exists($array, $key_prefix) {
  $keys = array_keys($array);
  foreach ($keys as $key) {
    if (0 == substr_compare($key, $key_prefix, 0, strlen($key_prefix))) {
      return true;
    }
  }

  return false;
}

答案 1 :(得分:2)

类似的东西:

function check($arr,$prefix) {
        foreach($arr as $key => $value) {
                if(strcmp(substr($key,0,strlen($prefix)),$prefix)==0) {
                        return true;
                }
        }
        return false;
}

答案 2 :(得分:2)

为什么不使用正则表达式?

function array_has_key_prefix( $array, $key_prefix ) {
  foreach($arr as $key => $value) {
    if( preg_match( "/^" . $key_prefix . "/", $key ) )
      return true;
  }
  return false;
}

答案 3 :(得分:1)

我更喜欢按如下方式重组数组:

$data=array('prefix1'=>array(
                  'field'=>34,
                  'anotherfield'=>345,
               ),
            'prefix2'=>array(
                  'field'=>56,
               ),

...等

使用该结构,您可以快速调用标准PHP函数array_key_exists()。

使用您拥有的结构,您必须基本上将自己的替代方法转换为array_key_exists(),这将涉及foreach()循环并使用explode()将密钥分解为位。

答案 4 :(得分:1)

我不会提供太多信息,我会尽快写出来。类似于Dominique Roger的职位。

function check_array_key_prefix_exists($array, $key_prefix) {
  $keys = array_keys($array);
  foreach ($keys as $key) {
    if (preg_match("#^$key_prefix", $array) {
      return true;
    }
  }

  return false;
}

我不知道我是否回答了你的问题部分,因为我没有将它运行到他的bwowser中。 祝你好运