Php 预匹配数组键
我是这样的:Php 预匹配数组键,php,arrays,Php,Arrays,我是这样的: $data = array( "City_0" => "London", "City_1" => "Paris", "City_2" => "Lisbon", "City_3" => "Berlin" ); 加上同一数组中的一些其他数据 用户将仅选择其中一个,我需要的是: 检查preg_match以获取所有以“city_”开头的密钥 查找具有值的键(它不是空的),获取该值 将其分配给新密钥 删除所有“城市”键 将新键
$data = array(
"City_0" => "London",
"City_1" => "Paris",
"City_2" => "Lisbon",
"City_3" => "Berlin"
);
加上同一数组中的一些其他数据
用户将仅选择其中一个,我需要的是:
foreach ($data as $key => $value) {
$matches = preg_match('/city_/i', $key);
if ($value != "") {
$newValue = $value;
break;
}
}
$data['chosen_city'] = $newValue;
print_r($data);
这在一定程度上是有效的,如何从if语句中的数组中删除所有以前的“city_u3;”键
注:
我在数组中有其他键,我也不想删除它们
输入阵列:
$data = array(
"City_0" => "London",
"City_1" => "Paris",
"City_2" => "Lisbon",
"City_3" => "Berlin",
"distance" => "5 km",
"days" => "7",
"tickets" => "2",
"discount" => "10%",
);
预期产出:
$data = array(
"chosen_city" => "Berlin",
"distance" => "5 km",
"days" => "7",
"tickets" => "2",
"discount" => "10%",
);
谢谢。请输入unset,例如代码:
$data = array( "City_0" => "London", "City_1" => "Paris", "City_2" => "Lisbon", "City_3" => "Berlin");
foreach($data as $key => $value){
$matches = preg_match('/city_/i', $key);
if($matches && $value != ""){
$newValue = $value;
unset($data[$key]);
}elseif($matches){
unset($data[$key]);
}
}
$data['chosen_city'] = $newValue;
在这种情况下,preg_*有点过头了——您可以使用strpos,它也可以正常工作 但是,问题是“如何删除城市密钥”,因此,只需使用unset(): 结果:
array(5) {
'distance' =>
string(4) "5 km"
'days' =>
string(1) "7"
'tickets' =>
string(1) "2"
'discount' =>
string(3) "10%"
'chosen_city' =>
string(6) "Berlin"
}
如果您使用PHP>=5.6,可能您可以使用(我没有测试这段代码)
你能给我们一个预期的输出吗?当然,$data(“Selected_city”=>“Berlin”,“distance”=>“5 km”)一个注意:距离已经在数组中…嘿,但是我需要删除所有的城市密钥,在我找到一个具有值的城市密钥之后。。。我需要删除所有城市密钥,但不删除阵列中的其他密钥$数据=阵列(“选定城市”=>“柏林”,“距离”=>“5公里”)您能给我一个输入阵列和输出阵列的示例吗。然后我给你一个代码好的,我会给你回复的,它仍然会输出City_0,City_1,即使我在数组中设置为空。。。所以输出就像一个数组([City\u 0]=>[City\u 1]=>[City\u 2]=>[distance]=>5km[Selected\u City]=>Berlin)你得到我的更新代码了吗?因为当我尝试时,它将返回数组([距离]=>5公里[天]=>7张[门票]=>2[折扣]=>10%[选择的城市]=>Berlin)是这样吗?我如何确定,如果在将来添加城市密钥,例如,城市名称将被删除,这就是我在这里使用preg_u的原因……因为您只需要检查以City_u开头的字符串,例如:if(stripos($key,'City')==0)//此键是City_u(或City_u)键
$data = array(
"City_0" => "London",
"City_1" => "Paris",
"City_2" => "Lisbon",
"City_3" => "Berlin",
"distance" => "5 km",
"days" => "7",
"tickets" => "2",
"discount" => "10%",
);
$value = 'Berlin';
if (array_search($value, $data)) {
$data['chosen_city'] = $value;
foreach ($data as $key=>$val) {
if (stripos($key, 'city_')===0) {
unset($data[$key]);
}
}
}
array(5) {
'distance' =>
string(4) "5 km"
'days' =>
string(1) "7"
'tickets' =>
string(1) "2"
'discount' =>
string(3) "10%"
'chosen_city' =>
string(6) "Berlin"
}
$city = array_search($value, $data);
if ($city) {
$data['chosen_city'] = $value;
$data = array_filter($data,function($key,$val){return stripos($key,'city_')===false;},ARRAY_FILTER_USE_BOTH);
}