我试图在阵列中添加带有电话号码的文件名。 我的测试文件是:
dsfdsf543-6786sdfsdfd.jpg
543-6786sdfsdfd.jpg
435-3454
dsfdsf543-6786.jpg
123-4567
543-6786.jpg
345-3454
我的目标是不同的电话号码将在阵列中具有单独的元素行。阵列行中的每个元素都具有相同的电话号码。 例如:
543-6786 dsfdsf543-6786sdfsdfd.jpg 543-6786sdfsdfd.jpg dsfdsf543-6786.jpg 543-6786.jpg
435-3454
123-4567
345-3454
我的代码:
$directory = $_SERVER['DOCUMENT_ROOT'];
$handler = opendir($directory);
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
preg_match_all($regex, $file, $results);
}
}
print_r ($results);
结果是
Array ( [0] => Array ( [0] => 345-3454 ) )
为什么数组中只有一个文件名? 我的错误在哪里? 提前谢谢!
答案 0 :(得分:3)
您一次将文件名提供给preg_match_all
,每次$result
被覆盖。问题是每次都将$results[0]
推送到一个数组上,然后转储该数组。
$final_results = [];
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
if (preg_match_all($regex, $file, $results) > 0)
$final_results[] = $results[0] ;
}
}
print_r ($final_results);
每条评论更新:此版本创建一个key =>值数组,其中电话号码是键,值是包含该号码的所有文件名。
$final_results = [];
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
$regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
if (preg_match_all($regex, $file, $results) > 0) {
if empty ($final_results[$results[0]]) {
$final_results[$results[0]] = $file ;
} else {
$final_results[results[0]] .= " ".$file ;
}
}
}
}
print_r ($final_results);
一旦你有了这个数组,就可以很容易地将它展平成一个你想要的一维数组。