2013-07-29 3 views
-2

배열에서 [번호]과 같은 패턴을 찾는 방법은 무엇입니까?배열에서 특정 패턴을 찾는 방법 -> [숫자]?

$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]'); 

어떻게 배열 필터링 단지 [숫자]같은 특정 패턴을 가지고 그 문자열을 길게

제가

이 유사한 배열이?

+1

'typeof','isArray' e.t.c를 사용할 수있는 구문 분석 함수를 작성하십시오. 자신의 패턴을 전달할 때 ([number], {object}, [string], [{object}]) – FSou1

+0

문자열을 찾거나 값의 유형을 결정한다는 의미입니까? 당신의 질문에 표기법과 약간의 혼란이있는 것 같습니다. 문자열은 적절하게 인용되어야합니다. –

+1

실례 내가 내 질문에 –

답변

3

당신은 array_filter()와 배열을 필터링 할 수 있습니다, 그것은 반복 :

$filtered_array = array_filter($array, function($el) { 
    return preg_match('/^\[\d+\]$/', $el); 
}); 

이것은 왼쪽 대괄호 [ 구성 항목을 찾을 수 preg_match()와 콜백을 사용하고, 숫자 \d+의 다음 번호, 그 다음 오른쪽 대괄호 ].

+0

편집'[]'배열에 대한 바로 가기 코드 DevZer0 @ 지금 – DevZer0

+2

입니다 - 예 내가 알고 있어요,하지만'{}이'아무것도에 대한 바로 가기 아니므로 영업 이익이 사용하는 말은 할 수없는'[] '(특히 OP가 더 자세한'array()'구문을 사용하기 때문에 중첩 된 배열을 만들 수 있습니다). – nickb

3

당신은 is_array()을 시도 할 수 :

foreach ($array as $num) { 
    if(is_array($num)) { 
    echo $num . "<br />"; 
    } 
} 
+2

이 배열입니까? [1] –

+0

@MohammadMasoudian - 아니요, 특히 배열의 각 요소를 문자열로 지정한다는 것을 보여주기 위해 게시물을 업데이트 한 이후 아닙니다. – nickb

0

을 그냥 preg_grep를 사용

$array = array(1, 2, 3, '{1}', '{2}', '{3}', '[1]', '[2]', '[3]'); 

$new_array = preg_grep('#^\[\d+(?:.\d+)?\]$#', $array); 
$new_array = array_values($new_array); // re-index the array 
print_r($new_array); // print the results 

을 정규식 설명하면서 :

  • ^ : 문자열
  • ,745의 시작을
  • \[ : 경기 [
  • \d+ : 경기 1 자리 이상
  • (?:.\d+)? : 문자열의 끝
+1

또는 ['preg_filter()'] (http : // php.net/preg-filter)를 입력하십시오. – salathe

0

뭔가 같이 : ]

  • $ 경기 : 선택적으로 소수 부분
  • \] 일치 아마도? 정규 표현식은 열기 [과 일치하며 그 뒤에 하나의 숫자와 그 뒤에 닫는 ]이옵니다.

    foreach ($array as $num) { 
        if (preg_match('#\[\d\]#', $num)) { 
         echo $num; 
        } 
    } 
    
  • +0

    '$ num '이''[14]''또는''abc [8] def "'이면? 이것은 첫 번째와 일치하지 않고 두 번째와 일치합니다. – nickb

    +0

    문자열에 무엇이 있었는지 질문에 지정되지 않았습니다. 방금 주어진 예제를 사용했습니다. –

    1

    여기에는 몇 가지 가능성이 있습니다.

    <?php 
    
    $array = array(1, 2, 3, "{1}", "{2}", "{3}", "[1]", "[2]", "[3]"); 
    
    
    
    // Method 1 
    foreach ($array as $num) 
    { 
        if(preg_match("/\[\d+\]/", $num)){ 
         echo $num . "<br />"; 
    
        } 
    } 
    echo "<hr/>" 
    // Method 2 
    $filtered=preg_grep("/\[\d+\]/", $array); 
    foreach ($filtered as $num) 
    { 
        echo $num . "<br />"; 
    } 
    
    ?> 
    
    관련 문제