Прежде всего, не сравнивайте результаты логических функций с true
или false
, вы можете просто использовать их напрямую.
Если вам нужно проверить, возвращает ли булева функция ложь, добавьте перед ней оператор NOT, !
if( !is_int($var) )
читается как if $var is not an integer
Кроме того, не изменяйте массив из его начального цикла. Храните индексы там, где вы хотите изменить и повторять эти индексы. Я добавил массив $todelete
, в котором хранятся индексы элементов для удаления. Затем я перебираю этот массив и удаляю эти индексы в исходном массиве.
Я также изменил ваше утверждение if, чтобы оно было более понятным.
Все элементы будут возвращать false, если они будут такими, какими они должны быть. Если кто-то не соответствует тому, что разрешено, он вернет истину, и удовлетворяет OR.
Вы также можете сделать обратное, удалить операторы NOT !
и заменить операторы OR ||
на операторы AND &&
смотреть онлайн: https://ideone.com/oUHTKR
<?php
$array48mom = [
[1530270934000, 19.4034, -155.2675, 3, 1, 'E', 612],
['1530270934000', 19.4034, -155.2675, 3, 2, 'E', 612],
[1530270934000, 19.4034, -155.2675, 3, 3, 'E', 612]
];
$array48mom = pulisci_array48mom($array48mom);
function pulisci_array48mom(&$array48mom){
$todelete = [];
for($i = 0; $i < count($array48mom); $i++) {
if(
!is_int($array48mom[$i][0])
|| !is_double($array48mom[$i][1])
|| !is_double($array48mom[$i][2])
|| !is_numeric($array48mom[$i][3])
|| !is_numeric($array48mom[$i][4])
|| !is_string($array48mom[$i][5])
|| !is_int($array48mom[$i][6])
){
$todelete[] = $i;
}
}
foreach($todelete as $key) {
unset($array48mom[$key]);
}
$array48mom = array_values($array48mom);
return $array48mom;
}
print_r($array48mom);
Что было бы даже лучше, чем использовать собственную функцию, используя array_filter , как выделено в ответе Йоши