Подтвердите значение ключа массива PHP & gt; Значение

Имея массив как [1]

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

Я хотел бы проверить, если специальные ключи (здесь ключ checkMe) внутреннего массива имеют одинаковое значение.
Если все ключи имеют одинаковое значение, я бы хотел удалить ключ из внутреннего массива. (из всех массивов)

Но когда есть массив вроде [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

Решение

Хорошо, если вы используете PHP 5.5+, вы можете использовать комбинацию array_column а также array_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'));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]