2010-06-17 4 views

답변

66

배열의 요소를 검색하려면 사용

한 번 수행 array_search()을 사용하여 수행 할 수 있습니다, 먼저 배열의 키를 찾을 필요가, 당신은 array_search을 사용할 수 있습니다 기능을 사용하고 배열에서 요소를 제거하려면 unset 기능을 사용할 수 있습니다. 예 :

<?php 
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page'); 

print_r($hackers); 

// Search 
$pos = array_search('Linus Trovalds', $hackers); 

echo 'Linus Trovalds found at: ' . $pos; 

// Remove from array 
unset($hackers[$pos]); 

print_r($hackers); 
?> 

더 많은 배열 관련 기능을 보려면 http://www.php.net/manual/en/ref.array.php을 참조하십시오. 다른 사람이 언급 한 바와 같이 모든

+7

그러나 array_search가 아무 것도 발견되지 않았기 때문에 false를 반환하면 첫 번째 배열 값이 제거 될 것이다 – algorhythm

+0

만약 있다면 정확히 일치하지 않는 경우 와일드 카드 검색을 수행하는 방법 –

+2

'if (pos === false)'로 일치하는 항목이 없는지 테스트 할 수 있습니다. – Ire

13

당신이이 unset()

<?php 
$array = array('apple', 'orange', 'pear'); 

unset($array[array_search('orange', $array)]); 
?> 
+0

이 결과를 어레이 ([0] = 인 > apple [1] => orange [2] => pear [3] => green) 경고 : 5 행의 C : \ Wamp \ www \ test \ test.php에있는 array_search()의 잘못된 매개 변수 개수 Array ([0] => apple [1] => orange [2] => pear [3] => green) – learner

+1

@learner http://ay3.php.net/manual/en/function에 haystack 인수가 없습니다. .array-search.php - 매뉴얼은 당신의 친구입니다. – Gordon

+0

예. 이게 작동합니다 $ array = array ('사과', '오렌지', '배', '녹색'); unset ($ array [array_search ('orange', $ array)]); 하지만 배열 시퀀스가 ​​없습니다. 그것을 바로 잡는 방법 – learner

1

먼저, 당신은 아래의 "array_search()"&은 "unset()"methodsas을 사용하는 것입니다 : -

이제
<?php 
$arrayDummy = array('aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg'); 
unset($arrayDummy[array_search('dddd', $arrayDummy)]); // Index 3 is getting unset here. 
print_r($arrayDummy); // This will show the indexes as 0, 1, 2, 4, 5, 6. 
?> 

중 하나를 정렬하지 않고 동일한 배열, 색인을 다시 아래 그림과 같이 배열 값, 당신은 "array_values()"방법을 사용해야합니다 : -

<?php 
$arrayDummy = array_values($arrayDummy); 
print_r($arrayDummy); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5. 
?> 

는 도움이되기를 바랍니다.

+1

그러나 array_search가 아무 것도 없기 때문에 false를 반환하면 첫 번째 배열 값이 제거됩니다. – algorhythm

+0

@algorhythm - 지적 해 주셔서 감사합니다! 나는 여러분 모두가 제공 한 솔루션을 사용해야한다고 제안 할 것입니다! –

7

언급 된 코드 중 하나를 사용하려는 경우 array_search은 "haystack"에 "needle"이 없으므로이 샘플이 첫 번째 (인덱스가없는) 항목의 설정을 해제합니다. 대신를 사용

<?php 
$haystack = Array('one', 'two', 'three'); 
if (($key = array_search('four', $haystack)) !== FALSE) { 
    unset($haystack[$key]); 
} 
var_dump($haystack); 

위 예제의 출력 :

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
) 

그리고 그 좋은를!

+0

+1 매우 완벽하게 작동하는 – algorhythm

61
<?php 
$my_array = array('sheldon', 'leonard', 'howard', 'penny'); 
$to_remove = array('howard'); 
$result = array_diff($my_array, $to_remove); 
?> 
+3

입니다. – Alex

+5

반복하지 않고 여러 값을 제거 할 수 있습니다! – dfmiller

+1

+1은 array_search의 반환 값을 확인하는 지루함을 피할 수 있습니다. – rinogo

-1

찾아 배열 값의 여러 인스턴스를 제거하려면,이 솔루션은 @의 조합 아래 코드

$list = array(1,3,4,1,3,1,5,8); 

$new_arr=array(); 

foreach($list as $value){ 

    if($value=='1') 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 


print_r($new_arr); 
+0

요청한대로 PHP 배열 함수를 사용하지 않습니다 ... – algorhythm

4

을 사용하고 여러 발행 수와 대한 @chyno 솔루션을 삭제 피터의 솔루션 첫 번째 발생을 제거합니다. 그게 내가 사용하는거야.

/** 
* @param array $haystack 
* @param mixed $value 
* @param bool $only_first 
* @return array 
*/ 
function array_remove_values(array $haystack, $needle = null, $only_first = false) 
{ 
    if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); } 
    if (empty($haystack)) { return $haystack; } 

    if ($only_first) { // remove the first found value 
     if (($pos = array_search($needle, $haystack)) !== false) { 
      unset($haystack[$pos]); 
     } 
    } else { // remove all occurences of 'needle' 
     $haystack = array_diff($haystack, array($needle)); 
    } 

    return $haystack; 
} 

는 또한 여기보고 있습니다 PHP array delete by value (not key)

+0

+1, 내 단점 *, 귀하의 * SUPERB * 대답, 그리고 내 잘못을 지적! 아, BTW, 다른 사람의 답변을 편집하고 이름을 올리면서 업데이트하여 잘못된 부분을 표시 할 수도 있습니다. –

0

한 기능이 언급되지 않은 array_filter입니다. 각 요소를 인수로 취하는 콜백 함수를 전달하기 만하면 해당 요소를 유지하거나 제거해야하는 경우 true 또는 false를 반환합니다. 이것은 또한 중복 값을 제거하는 이점이 있습니다.

$myArray = array('one', 'two', 'deleteme', 'three'); 
$output = array_filter($myArray, function($val) { return $val != 'deleteme'; }); 

을 그리고 당신은 배열을 인덱스 다시하려는 경우, 당신은과 같이 array_values에 결과를 전달할 수 있습니다 :

당신은 다음과 같이 사용할 수 있습니다

$output = array_values($output); 
0

이것은 내가 얼마나입니다 그렇게하는 것 :

$terms = array('BMW', 'Audi', 'Porsche', 'Honda'); 
// -- purge 'make' Porsche from terms -- 
if (!empty($terms)) { 
    $pos = ''; 
    $pos = array_search('Porsche', $terms); 
    if ($pos !== false) unset($terms[$pos]); 
}