我有一个2D数组,如下所示:
Array
(
[0] => Array
(
[0] => 12345678
[1] => 56
)
[1] => Array
(
[0] => 34567822
[1] => 67
)
[2] => Array
(
[0] => 12324654
[1] => 98
)
[3] => Array
(
[0] => 234769O1
[1] => 45
)
)
我想检查每个值,例如$array[0][0]
是否长8位且$array[0][1]
是否介于1和100之间..但我想为每个数组执行此操作,因此我在想一个for循环,但我不能让它工作。
这就是我尝试过的,它会完全归还所有内容:
foreach ($data as $student) {
foreach ($student as $key => $value) {
echo $student[$key];
}
}
我可以得到一些帮助吗?
答案 0 :(得分:1)
一段代码示例:
foreach ($data as $student) {
if (strlen($student[0]) == 8 && (1 <= $student[1] && $student[1] <= 100)) {
echo 'Fits';
}
}
答案 1 :(得分:1)
您可以使用array_filter
获取阵列中的所有有效项目:
//your array with valid and invalid items.
$arr = [
[12345678, 56],
[34567822, 67],
[12324654, 98],
['234769O1', 45]
];
//filter all items of the array with 8 digits on index 0 and
//a number between 1 and 100 on index 1.
$valid_arr = array_filter($arr, function($v) {
return preg_match("/^[0-9]{8}$/", $v[0]) === 1 && $v[1] >= 1 && $v[1] <= 100;
});
如果您想获取阵列中的所有无效项目,可以使用以下代码:
$invalid_arr = array_filter($arr, function($v) {
return !(preg_match("/^[0-9]{8}$/", $v[0]) === 1 && $v[1] >= 1 && $v[1] <= 100);
});
如果您需要使用foreach
循环,可以使用以下解决方案:
$arr = [
[12345678, 56],
[34567822, 67],
[12324654, 98],
['234769O1', 45]
];
foreach ($arr as $item) {
if (preg_match("/^[0-9]{8}$/", $item[0]) === 1 && $item[1] >= 1 && $item[1] <= 100) {
echo $item[0].':'.$item[1];
}
}
答案 2 :(得分:1)
如果需要删除它们,可以过滤数组:
$array = array_filter($array, function($v) {
return strlen($v[0]) == 8 &&
$v[1] > 0 &&
$v[1] < 101;
}
如果您需要额外的数字检查,那么:
return strlen($v[0]) == 8 &&
is_numeric($v[0]) &&
$v[1] > 0 && $v[1] < 101;
答案 3 :(得分:1)
你可以这样做:
$array = array(
array(12345678,56),
array(34567822,67),
array(123123312,123),
array(123123,33),
array(12324654,98),
array(23476901,45),
array(1231412,101),
);
foreach($array as $a) {
if(strlen($a[0]) == 8 && $a[1] > 1 && $a[1] < 100) {
// conditions met
} else {
// conditions not met
}
}
我在数组中添加了一些不通过测试的元素。
在您的示例中,您编写了[0] => 234769O1
,其中您使用了字母 O 而不是数字 0 。也许这是你代码中的错误。