0

[1] のような配列を持つ

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

checkMe内部配列の特殊キー (ここでは key ) が同じ値を持っているかどうかを確認したいと思います。すべてのキーの値が同じである場合、内部配列からキーを削除したいと思います。(すべての配列から)

しかし、 [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')));
4

1 に答える 1

2

OK、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'));
于 2014-11-11T12:41:33.707 に答える