如果项目是不同类型的变量,则在循环中删除数组

问题描述 投票:0回答:4

您好我有一个问题太难解决... 我有一个多维数组,我想删除每个元素是一个不同类型的变量。我想检查所有元素是否都有正确的数据。

<?php
    $array48mom = Array( 
        Array(1530270934000,19.4034,-155.2675,3,1,'E',612),
        Array('1530270934000',19.4034,-155.2675,3,2,'E',612),
        Array(1530270934000,19.4034,-155.2675,3,3,'E',612)
    );
?>

现在代码有功能:

<?php 
    $array48mom = pulisci_array48mom($array48mom);

    function pulisci_array48mom(&$array48mom){
        for($i = 0; $i < count($array48mom); $i++) {    
            if( (
                (is_int($array48mom[$i][0]) == true) 
                || (is_double($array48mom[$i][1]) == true) 
                || (is_double($array48mom[$i][2])== true) 
                || (is_numeric($array48mom[$i][3]) == true) 
                || (is_numeric($array48mom[$i][4]) == true) 
                || (is_string($array48mom[$i][5]) == true) 
                || (is_int($array48mom[$i][6]) == true)) == false
            ){
                unset($array48mom[$i]); 
            }
        }
        $array48mom = array_values($array48mom);    
        return $array48mom; 
    }
    print_r($array48mom);
?>

输出应该是这样的:

Array
(
 [0] => Array
     (
        [0] => 1530270934000
        [1] => 19.4034
        [2] => -155.2675
        [3] => 3
        [4] => 1
        [5] => 'E'
        [6] => 612
     )   

 [1] => Array
    (
        [0] => 1530270934000
        [1] => 19.4034
        [2] => -155.2675
        [3] => 3
        [4] => 3
        [5] => 'E'
        [6] => 612
    )

 )

但我不知道为什么这段代码的输出是这样的:

Array
(
[0] => Array
    (
        [0] => 1530270934000
        [1] => 19.4034
        [2] => -155.2675
        [3] => 3
        [4] => 1
        [5] => E
        [6] => 612
    )

[1] => Array
    (
        [0] => 1530270934000
        [1] => 19.4034
        [2] => -155.2675
        [3] => 3
        [4] => 2
        [5] => E
        [6] => 612
    )

[2] => Array
    (
        [0] => 1530270934000
        [1] => 19.4034
        [2] => -155.2675
        [3] => 3
        [4] => 3
        [5] => E
        [6] => 612
    )

 )
php arrays multidimensional-array gettype
4个回答
3
投票

可读代码更容易调试,例如:

function pulisci_array48mom(array $input): array {
    // filter the input,        by
    return array_filter($input, function ($entry) {

        // each index
        return is_int($entry[0])
            && is_double($entry[1])
            && is_double($entry[2])
            && is_numeric($entry[3])
            && is_numeric($entry[4])
            && is_string($entry[5])
            && is_int($entry[6]);
    });
}

$input = pulisci_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],
]);

print_r($input);

但是:ぁzxswい


2
投票

首先,不要将布尔函数的结果与https://3v4l.org/vccgYtrue进行比较,您可以直接使用它们。

如果你需要检查一个布尔函数是否返回false,在它前面添加一个NOT运算符,一个false

!

读为if( !is_int($var) )

另外,不要从它的初始循环修改数组。将索引存储在您希望修改的位置并迭代这些索引。我添加了一个if $var is not an integer数组,我存储要删除的项目的索引。然后我迭代该数组并删除原始数组中的那些索引。

我还修改了你的if语句,以便更容易理解。

如果它们是应该的,那么所有项目都将返回false。如果一个与允许的不匹配,它将返回true,并满足OR匹配。

你也可以做反过来,删除NOT运算符$todelete并用AND运算符替换OR运算符! ||

在线查看:&&

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


1
投票

一切都很好,期待这种变化||至 &&

answer of Yoshi

?>


0
投票

试试这个好友!

<?php 
$array48mom = pulisci_array48mom($array48mom);

function pulisci_array48mom(&$array48mom){
    for($i = 0; $i < count($array48mom); $i++) {    
        if( (
            (is_int($array48mom[$i][0]) == true) 
            && (is_double($array48mom[$i][1]) == true) 
            && (is_double($array48mom[$i][2])== true) 
            && (is_numeric($array48mom[$i][3]) == true) 
            && (is_numeric($array48mom[$i][4]) == true) 
            && (is_string($array48mom[$i][5]) == true) 
            && (is_int($array48mom[$i][6]) == true)) == false
        ){
            unset($array48mom[$i]); 
        }
    }
    $array48mom = array_values($array48mom);    
    return $array48mom; 
}
print_r($array48mom);
© www.soinside.com 2019 - 2024. All rights reserved.