您可以遍历数组并使用该gettype()
函数来保留/删除数组项。但是,您需要一个递归函数来处理数组中的数组。&
请注意以下代码示例中对两个的谨慎使用:
$arrayData = array(
0 => (int) 100,
1 => '2012-12-01',
2 => array(
0 => (string) 'some string',
1 => (int) 200
),
3 => (string) 'another string'
);
function remove_nonstring_recursive(&$array) {
foreach ($array as $key => &$value) {
$type = gettype($value);
if ($type == "array") {
remove_nonstring_recursive($value);
} elseif ($type != "string") {
unset($array[$key]);
}
}
}
remove_nonstring_recursive($arrayData);
var_dump($arrayData);
// array(3) {
// [1]=>
// string(10) "2012-12-01"
// [2]=>
// array(1) {
// [0]=>
// string(11) "some string"
// }
// [3]=>
// string(14) "another string"
// }
原始答案 - 使用array_walk_recursive
全局变量
$arrayData = array(
0 => (int) 100,
1 => '2012-12-01',
2 => array(
0 => (string) 'some string',
1 => (int) 200
),
3 => (string) 'another string'
);
$arrayDataFiltered = array();
function remove_non_string($value, $key) {
global $arrayDataFiltered;
if (gettype($value) == "string") {
$arrayDataFiltered[] = $value;
}
}
array_walk_recursive($arrayData, "remove_non_string");
var_dump($arrayDataFiltered);
// array(3) {
// [0]=>
// string(10) "2012-12-01"
// [1]=>
// string(11) "some string"
// [2]=>
// string(14) "another string"
// }