#php #arrays
#php #массивы
Вопрос:
У меня есть несколько PHP-массивов, которые выглядят следующим образом…
$cars1 = array("Volvo", "Volvo", "Volvo");
$cars2 = array("Volvo", "BMW", "Toyota");
$cars3 = array("Volvo");
$cars4 = array("Volvo", "BMW", "Volvo");
$cars5 = array("BMW", "Toyota");
Мне нужно определить, когда массив содержит все Volvo или только один Volvo сам по себе. Таким образом, в приведенных выше примерах будут передаваться только $ cars1 и $ cars3.
У кого-нибудь есть похожий пример, который я вижу?
Ответ №1:
вероятно, вы ищете что-то вроде этого
function arrayEq($array,$val)
{
foreach($array as $item)
{
if($item != $val)
{
return false;
}
}
return true;
}
$cars1 = array("Volvo", "Volvo", "Volvo");
$cars2 = array("Volvo", "BMW", "Toyota");
$cars3 = array("Volvo");
$cars4 = array("Volvo", "BMW", "Volvo");
$cars5 = array("BMW", "Toyota");
var_dump(arrayEq($cars1,"Volvo"));
var_dump(arrayEq($cars2,"Volvo"));
var_dump(arrayEq($cars3,"Volvo"));
var_dump(arrayEq($cars4,"Volvo"));
var_dump(arrayEq($cars5,"Volvo"));
что делает функция, так это перебирает переданный массив с a для каждого и с каждым элементом в массиве сравнивает его с значением сравнения, которое мы передали.
если хотя бы один элемент в массиве не соответствует значению comapring, мы возвращаем false . это также выходит из цикла. если цикл может пройти весь путь, тогда мы знаем, что все значения одинаковы и возвращают true
обратите внимание, что это чувствительный к регистру ss "Volvo" != "volvo"
, но вы можете исправить это с помощью чего-то вроде strtoupper
или strtolower
Ответ №2:
Используйте array_unique()
функцию, за которой следует простое if
условие, например:
$cars1 = array("Volvo", "Volvo", "Volvo");
$car = array_unique($cars1);
if(count($car) == 1 amp;amp; $car[0] == 'Volvo'){
// the condition has passed
// Only $cars1 and $cars3 would get through this if condition
}
// like this, apply the same procedure for other arrays