2016-06-06 4 views
0

루프를 돌고 나중에 다른 목록으로 분리해야하는 JSON 데이터의 긴 목록이 있습니다. 하지만 빠르게 작성하는 각 목록에서 첫 번째 가치를 포착 할 수있는 방법을 찾아야합니다.PHP의 switch 문에서 첫 번째 레코드를 꺼내십시오.

나는 진실한 거짓 부울을 생각하고 처음 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); 
} 
+0

스위치는 실제로 afaics에서 일하는 데있어 잘못된 도구입니다. – PeeHaa

+0

알았어, 뭘 제안 할까? – Showcaselfloyd

+0

올바른 단일 정규식을 사용하여 원하는대로 일치시킵니다. 만약 당신이하고 싶다는 것을 이해한다면 그럴 것입니다. – PeeHaa

답변

2

특히 여러 어레이에서 고통 스럽습니다. 왜 정규식 일치 캡처 그룹하지, 뭔가 /^(RT 2|RT 8|RT 9| etc...)/처럼, 당신은 배열 인덱스로 캡처 그룹을 사용할 수 있으며, 단 몇 줄에 전체 스위치 감소 : 한 배열을 이제

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

을 , 카메라 모델에 의해 키가 많은 배열 대신, 다른 이름을 가진, 당신은 (나쁜 아이디어를 처리하기 위해 특별한 코드를 써야하거나 가변 변수를 사용합니다 (더 나쁜 아이디어).

+0

완벽합니다. 이것은 내 문제를 해결합니다. 정말 고마워! – Showcaselfloyd

관련 문제