配列を反復処理し、gettype()
関数を使用して配列項目を保持/削除できます。ただし、配列内の配列を処理するには再帰関数が必要です。&
次のコード例では、慎重に 2 を使用していることに注意してください。
$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"
// }