Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 预匹配数组键_Php_Arrays - Fatal编程技术网

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"
    );
加上同一数组中的一些其他数据

用户将仅选择其中一个,我需要的是:

  • 检查preg_match以获取所有以“city_”开头的密钥
  • 查找具有值的键(它不是空的),获取该值
  • 将其分配给新密钥
  • 删除所有“城市”键
  • 将新键添加到名为“Selected_city”的数组中,该数组将包含该值
  • 我尝试的是:

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