Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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/2/.net/22.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中的一组Switch语句中提取第一条记录_Php_Json - Fatal编程技术网

从PHP中的一组Switch语句中提取第一条记录

从PHP中的一组Switch语句中提取第一条记录,php,json,Php,Json,我有一个很长的JSON数据列表,需要循环并分解成不同的列表,然后保存以备将来使用。但我需要找到一种方法,在我正在创建的每个列表中快速捕获第一个值 我想到了一个真-假布尔值,并在第一次调用switch语句后将其设置为false,然后将该值推送到一个新数组中,但它似乎不优雅 无论如何,我一直在寻找一些关于如何处理这个问题的建议 这是我目前的工作 function dump_locations($obj){ $i91 = array(); $i95 = array(); $

我有一个很长的JSON数据列表,需要循环并分解成不同的列表,然后保存以备将来使用。但我需要找到一种方法,在我正在创建的每个列表中快速捕获第一个值

我想到了一个真-假布尔值,并在第一次调用switch语句后将其设置为false,然后将该值推送到一个新数组中,但它似乎不优雅

无论如何,我一直在寻找一些关于如何处理这个问题的建议

这是我目前的工作

 function dump_locations($obj){

    $i91 = array();
    $i95 = array();
    $i84 = array();
    $rt2 = array();
    $rt8 = array();
    $rt9 = array();
    $i395 = array();
    $rt15 = array();
    $rt72 = array();
    $other = array();

foreach($obj as $camera){
    switch($camera->name){
        case (preg_match('/^I-95/', $camera->name) ? true : false) :
            array_push($i95,$camera);
        break;
        case (preg_match('/^I-84/', $camera->name) ? true : false) :
            array_push($i84,$camera);
        break;
        case (preg_match('/^I-91/', $camera->name) ? true : false) :
            array_push($i91,$camera);
        break;
        case (preg_match('/^I-395/', $camera->name) ? true : false) :
            array_push($i395,$camera);
        break;
        case (preg_match('/^CT-15/', $camera->name) ? true : false) :
            array_push($rt15,$camera);
        break;
        case (preg_match('/^RT 2/', $camera->name) ? true : false) :
            array_push($rt2,$camera);
        break;
        case (preg_match('/^RT 8/', $camera->name) ? true : false) :
            array_push($rt8,$camera);
        break;
        case (preg_match('/^RT 9/', $camera->name) ? true : false) :
            array_push($rt9,$camera);
        break;
        case (preg_match('/^RT 72/', $camera->name) ? true : false) :
            array_push($rt72,$camera);
        break;
        default:
            array_push($other,$camera);
    }
}

    save_file('i91_cameras.json',$i91);
    save_file('i95_cameras.json',$i95);
    save_file('i84_cameras.json',$i84);
    save_file('rt2_cameras.json',$rt2);
    save_file('rt8_cameras.json',$rt8);
    save_file('rt9_cameras.json',$rt9);
    save_file('i395_cameras.json',$i395);
    save_file('rt15_cameras.json',$rt15);
    save_file('rt72_cameras.json',$rt72);
    save_file('other_cameras.json',$other);
}

看起来很痛苦,尤其是在使用多个阵列时。为什么不让正则表达式匹配一个捕获组,或者类似于
/^(RT 2 | RT 8 | RT 9 |等)/
,然后您可以将该捕获组用作数组索引,并将整个开关减少到几行:

$data = array();
foreach($obj as $camera){
   if (preg_match('/^(I-95|I-84|etc...|RT 72)/', $camera->name, $matches)) {
      $data[$matches[1]][] = $camera;
   } else {
      $data['default'][] = $camera;
}

现在,您有了一个由相机模型设置关键帧的数组,而不是许多数组,每个数组都有不同的名称,您必须为这些数组编写特殊代码来处理(坏主意),或者使用变量(更坏的主意)。

看起来很痛苦,尤其是对于多个数组。为什么不让正则表达式匹配一个捕获组,或者类似于
/^(RT 2 | RT 8 | RT 9 |等)/
,然后您可以将该捕获组用作数组索引,并将整个开关减少到几行:

$data = array();
foreach($obj as $camera){
   if (preg_match('/^(I-95|I-84|etc...|RT 72)/', $camera->name, $matches)) {
      $data[$matches[1]][] = $camera;
   } else {
      $data['default'][] = $camera;
}

现在你有了一个数组,由相机模型设置关键帧,而不是许多数组,每个数组都有不同的名称,你必须为它们编写特殊的代码来处理(坏主意),或者使用变量(更坏的主意)。

开关对于这里的工作来说确实是错误的工具。好的,你有什么建议吗?用一个合适的正则表达式来匹配你想要的。如果我明白你想做什么的话。对于afaics的工作来说,开关确实是错误的工具。好吧,你有什么建议?使用一个合适的正则表达式来匹配你想要的任何东西。如果我明白你想做什么的话。