2014-10-16 6 views
1

이의 내가PHP 변환 문자열

$array = Array(Array('a' => 'a', 'x' => $something)); 

변수의 $ 뭔가 그렇게 할 수있는이 구조 배열을한다고 가정 해 봅시다.

사례 1. $ 뭔가 = 1-3

$array = Array(Array('a' => 'a', 'x' => Array(1,2,3))); 

사례 2. $ 뭔가 = 1,3

$array = Array(Array('a' => 'a', 'x' => Array(1,3))); 

케이스 3 ... : 나는 무엇에 변수 $ 배열을 변환하기 $ something = 1-3, 2-5

$array = Array(Array('a' => 'a', 'x' => Array(1,2,3,4,5))); 

나는 preg_match를 사용하려고 시도했지만 작동하지 않습니다. 다른 것을 사용하는 힌트를 줄 수 있습니까?

답변

0

당신은이 배열 내부에 'X'의 내용을 수정하려면

$array = Array(Array('a' => 'a', 'x' => $something)); 

있습니다. (당신은 $ something을 수정하지 않습니다).

$array[0]['x'] = Array(1,2,3); 

또는

$ 어레이 [0] [ 'X'= 배열 (1,2,3,4,5);

1

입력 문자열을 분할하려면 explode, 내용을 배열로 생성하려면 range, 결과를 병합하려면 array_merge을 찾고 있습니다. 이 같은

뭔가 작동 : 마지막 할당에서

<?php 
$something = '1-3, 2-5'; 
$array = array(array('a' => 'a', 'x' => array())); 

$result = array(); 

foreach (explode(', ', $something) as $input) { 
    $rangeParts = explode('-', $input); 
    $result = array_merge($result, range($rangeParts[0], $rangeParts[1]));  
} 

// contains duplicate entries because 1-3 and 2-5 overlap - use array_unique to remove duplicates or change input 
$array[0]['x'] = $result; 

을 당신도 array_unique 1에 $result을 포장 할 수 입력 ($something)이 제대로 포함/전용을 반영하기 위해 일치하여 예를 또는 편집 1 range 함수의 룰.

+0

너무 감사합니다! – OsomA

+0

나는 위의 코드가 원하는 결과를 만들어 내는지 정말로 의심 스럽다. PHP 매뉴얼에서 explode 함수를 확인하십시오 (첫번째 매개 변수는 분리 문자 임). – geoandri

+0

그의 아이디어는 효과가 없지만 적어도 시작은 있습니다. $ something = '1,3'인 경우에는 작동하지 않습니다. – OsomA

0

귀하의 예를 들어 당신이하지 정렬 된 입력을 다음 코드를

$newomething = range(substr($something, 0, 1),substr($something, -1)); 

UPDATE 작업 솔루션을 사용할 수 있듯이 $ 뭔가 내부의 값이 항상 분류하는 경우. 다음 코드는이 내 sugestion입니다

$something= '4,5,1-3,13,7-9'; 

    $something = explode(',',$something); 
    $result= array(); 
    foreach($something as $value) 
    { 
     if (strpos($value,'-') !== false) 
     { 
     $r = explode('-',$value); 
     $rad = range($r[0],$r[1]); 
     $result = array_merge($result,$rad); 
     } 
     else 
     { 
     array_push($result,$value); 
     } 
    } 
    sort($result); 
+0

이 코드는 Array (1,2,3)를 생성하고 결과가 Array (1,3) – OsomA

+0

이어야하므로 $ something = '1,3'에 대해 작동하지 않습니다. – geoandri

+0

입력 코드의 모든 가능한 조합에서 작동하도록 코드가 업데이트되었습니다. – geoandri

0

, 내가 당신을 위해 일을 희망처럼 입력에서 작동합니다 :

$something = "1,2,3,4"; 

$array = Array(Array('a' => 'a', 'x' => $something)); 

if(preg_match('/(\d+\-\d+(\,?))+/', $array[0]['x'], $m)) 
{ 
    $x_values = Array(); 
    $sets  = explode(',', $m[0]); 

    foreach($sets as $set) 
    { 
     preg_match('/(\d+)\-(\d+)/', $set, $m); 
     $start  = $m[1]; 
     $end  = $m[2]; 

     for($i = $start; $i <= $end; $i++) 
     { 
      if(in_array($i, $x_values)) 
      { 
       continue; 
      } 

      array_push($x_values, $i); 
     } 
    } 

    $array[0]['x'] = $x_values; 
} 
else if(preg_match('/(\d+)\-(\d+)/', $array[0]['x'], $m)) 
{ 
    $x_values = Array(); 
    $start  = $m[1]; 
    $end  = $m[2]; 

    for($i = $start; $i <= $end; $i++) 
    { 
     array_push($x_values, $i); 
    } 

    $array[0]['x'] = $x_values; 
} 
else if(preg_match('/\d+\,\d+/', $array[0]['x'], $m)) 
{ 
    $x_values = explode(',', $array[0]['x']); 
    $array[0]['x'] = $x_values; 
} 
+0

코드가 작동하지만, 처음 시도했을 때 이와 같은 문제가 발생했습니다. 그러나이 쉬운 문제는 다른 해결책이라고 생각합니다. – OsomA