2010-03-12 9 views
1

배열과 변수가 있습니다. 변수가 배열에 없으면 추가해야합니다. 그렇지 않으면 제거해야합니다. 다음 코드가 작동하지 않는 이유는 무엇입니까?배열에 문자열 삽입 및 제거

$ar = ["a","b","c"]; 
$vr = "b"; 

foreach ($ar as $i => $value) { 
    if ($value == $vr) { 
     unset ($ar[$i]); 
    } else { 
     $ar[] = $vr; 
     $ar = array_unique($ar); 
    } 
} 

감사합니다. 그래서 배열 선언이 정확하지 않은 경우

+1

구문, 결함있는 논리가 잘못되었습니다. 'foreach'가 배열 사본을 반복한다는 사실 ... 어디서부터 시작할까요? –

답변

1

난 당신이 PHP를 사용하는 가정, 그것이 있어야 :

$ar = array("a", "b", "c");

질문의 코드는 다소 복잡 -과 혼란의 비트, 나는 당신이 원하는 것을 위해 말하기를 유감스럽게 생각합니다. 당신이 원하는 것을 달성하기 위해, 당신은 array_search을 사용할 수 존재하고 않는 경우 값을 제거하지 않는 경우

$valueExists = array_search($vr, $ar); 
if ($valueExists !== false) { 
    unset($ar[$valueExists]); 
} else { 
    $ar[] = $vr; 
} 

이 배열의 끝에 값을 밀어 것입니다.

array_unique() 

모든 통화

+1

작동하지 않습니다. array_search의 반환 값은 0 일 수 있습니다 (이 예에서 "a"를 검색 할 때). 따라서 if ($ valueExists)가 실패합니다. $ valueExists와 false를 비교해야합니다. – codaddict

+0

맞아요, 지적 해 주셔서 고맙습니다. 그것을 정정했다. – mensch

+0

0은 false로 처리됩니다. 당신은 if ($ valueExists! == false)를 사용하여 비교할 필요가 있습니다 -> 나는 당신이 그것을 이미 수정 한 것을 보았습니다;) – Tobias

0

먼저 값이 이전에 배열에 있었다면 때문에, 당신은 당신이 발견하는 대신 후에는 foreach 루프를 중단해야합니다 .. 을 삭제하려면, 말도 안돼 키를 누르고 keyFound = true와 같은 부울 값을 설정하십시오.
루프가 끝나면 루프가 설정되었는지 확인할 수 있습니다. 루프가 설정되어 있지 않으면 변수를 배열에 삽입하십시오.
코드를 사용하면 변수가 비교 될 때마다 검색 키를 삽입하므로 변수가 동일하지 않습니다.

0

음 ... 꽤 혼란 스럽네.

mensch가 말한대로 array_search을 사용해야합니다.

다음은 학습 목적으로 만 작동하도록 비트가 "remastered"된 코드입니다.

<?php 

function toggle($ar, $vr) 
{ 
    $found = false; 
    foreach ($ar as $i => $value) 
    { 
     if ($value == $vr) 
     { 
      unset ($ar[$i]); 
      $found = true; 
     } 
    } 

    if (!$found) 
    { 
     $ar[] = $vr; 
     $ar = array_unique($ar); 
    } 
    return $ar; 
} 

function printArray($ar) 
{ 
    foreach ($ar as $i => $value) 
    { 
     echo ($value . " - "); 
    } 
    echo ("<br/>"); 
} 

$ar = array("a", "b", "c"); 

printArray($ar); 

$ar = toggle($ar, "b"); 

printArray($ar); 

$ar = toggle($ar, "k"); 

printArray($ar); 

?> 
0

당신은 할 수 있습니다 :

$ar = array("a","b","c"); 
$vr = "d"; 

if(($pos = array_search($vr,$ar)) !== false) 
    unset($ar[$pos]); 
else 
    $ar[] = $vr; 

먼저 우리는 값이 배열에 존재하는지 확인하기 위해 array_search()를 사용합니다. 값이 존재하지 않으면 array_search()의 반환 값은 false이고 값이 존재하면 해당 키를 반환합니다. 따라서 우리는 반환 값을 false으로 확인합니다. 또한 우리는 $pos이라는 변수에 반환 값을 수집합니다. 키가있는 경우 unset() 메서드를 사용하여 배열에서 값을 삭제하고 값이 존재하지 않으면 추가합니다.