2014-11-11 2 views
0

. 모든 키의 값이 같으면 내부 배열에서 키를 제거하고 싶습니다.유효성 PHP 배열 키> 값

하지만 [2]

$arr = array(
     array(
      "ignoreMe" => "123", 
      "checkMe" => "value", 
     ), 
     array(
      "ignoreMe" => "456", 
      "checkMe" => "value", 
     ), 
     array(
      "ignoreMe" => "789", 
      "checkMe" => "foo", 
     ), 
); 

같은 배열을 갖는 경우 모든 키들을 그대로 유지한다 (모든 배열에서).

이 복잡한 유효성 검사기로 어떻게해야합니까? (링크 https://github.com/Respect/Validation) [1]이다

$arr = array(
     array(
      "ignoreMe" => "123", 
     ), 
     array(
      "ignoreMe" => "456", 
     ), 
); 

예상 결과 [2] 어떤 시도 된 여기

을 터치하면 안

$validator = v::arr()->each(v::key("check", v::equals('value'))); 
+0

@Rikesh I 내 질문에 예상 된 결과를 추가했습니다. – paskl

+0

무엇을 시도 했습니까? 다른 사람들에 대해서는 잘 모릅니다. 그러나 제 3 자 라이브러리 사용 방법을 사람들에게 가르치 려하지 않습니다. 너 자신을 가르치거나 어떤 코스를 가져야한다. –

+0

@ SverriM.Olsen'$ validator = v :: arr() -> each (v :: key ("check", v :: equals ('value')))'해당 키에 지정된 값을 취합니다. 문제는 키의 값이 항상 같지는 않다는 것입니다. 그게 내가 붙어있는 곳이야. – paskl

답변

2

좋아 PHP 5.5 이상을 실행중인 경우 array_columnarray_unique 함수의 조합을 사용하여 배열에서 항목을 제거 할 수 있습니다. 모두가 같은 값이 있습니다 ...

나는 그런 함수가 호출 될 정확히 모르겠습니다을, 그래서 난 그냥 myFunc라고

function myFunc(array $arr, $key) 
{ 
    // Get all the values using a key 
    $values = array_column($arr, $key); 

    // Remove all duplicates 
    $unique = array_unique($values); 

    // If there only is one item left then it means 
    // that all the values are the same, so proceed 
    // with modifying it... 
    if (count($unique) === 1) { 

     // Go over each array... 
     foreach ($arr as $x => & $value) { 

      // And unset the key 
      unset($value[$key]); 
     } 
    } 
    // Return the array 
    return $arr; 
} 

예 :

$arr1 = array(
    array("ignoreMe" => "123", "checkMe" => "value"), 
    array("ignoreMe" => "456", "checkMe" => "value"), 
); 
$arr2 = array(
    array("ignoreMe" => "123", "checkMe" => "value"), 
    array("ignoreMe" => "456", "checkMe" => "value"), 
    array("ignoreMe" => "789", "checkMe" => "foo"), 
); 

// All the values in this array are the same, so they 
// will be removed 
var_dump($arr1); 
var_dump(myFunc($arr1, 'checkMe')); 
echo '<hr>'; 

// There is a value in this array that is not the same 
// as the others, so this array will be left intact 
var_dump($arr2); 
var_dump(myFunc($arr2, 'checkMe')); 
+0

잘 작동합니다. 나는'array_column'을 모른다. 좋은 기능. :) – paskl

+0

@pquerner 그래, 많은 사람들이 그것을 알아 차린 것 같지 않다. 그것은 5.5에서 추가되었으므로 아마 비교적 새로운 것입니다. –