你好,我有一个问题太难解决了...
我有一个多维数组,我想删除每个属于不同类型变量的元素。
我想检查所有元素是否具有正确的数据类型。
<?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
)
)
但是我不知道为什么这段代码中的oputput是这样的:
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
)
)
答案 0 :(得分: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);
答案 1 :(得分:2)
首先,不要将布尔函数的结果与true
或false
进行比较,您可以直接使用它们。
如果您需要检查布尔函数是否返回false,请在其前面添加一个NOT运算符,!
if( !is_int($var) )
读为if $var is not an integer
此外,请勿在初始循环中修改数组。将索引存储在您希望修改和迭代这些索引的位置。我添加了一个$todelete
数组,用于存储要删除的项目的索引。然后,我迭代该数组并删除原始数组中的那些索引。
我还修改了您的if语句,使其更易于理解。
如果所有项目都是应有的值,则它们将返回false。如果不匹配,将返回true,并满足OR匹配。
您还可以进行反操作,删除NOT运算符!
,然后将AND运算符||
替换为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中突出显示的那样,使用answer of Yoshi甚至比滚动自己的函数还要好。
答案 2 :(得分:1)
一切正常,可以期待此更改||到&&
<?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);
?>
答案 3 :(得分:0)
试试这个哥们!
<?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)
);
$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
){
echo "UNSET {$i}\r\n";
unset($array48mom[$i]);
}
}
$array48mom = array_values($array48mom);
return $array48mom;
}
print_r($array48mom);