我有一个这样的数组:
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_
开头的字段?
答案 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中。 祝你好运