foreach ($files as $file) {
$filename = substr($file, 0, strrpos($file, '.')) . '.jpg'; // file name with .jpg extension
// lots of irrelevant code between here
if (isset($filename)) {
$newProcessedFileNames[] = $filename;
}
}
$testArray = [];
$result = array_values($newProcessedFileNames);
foreach ($result as $row) {
$string = explode('\\', $row);
$testArray[] = $string;
}
prettyPrint($testArray); // just a print_r function wrapped in pre tags
我正在做一个基于 GUID 压缩图像并(最终)将文件名重写到数据库的项目。
我尝试了各种循环和数组函数来得到我想要的数组结构,但没有成功。
$newProcessedFileNames
是一个包含 $filename 字符串的数组。
每个
$filename
的结构为:{DIRECTORY}\\{FILENAME}.jpg
或GUID\\FILENAME.jpg
,如果你愿意的话。
例子:
0ec3d6c6-7655-4f90-b290-86ad0e201d8f\\1671630653-20221221-134503.jpg
我目前得到的结构:
Array
(
[0] => Array
(
[0] => 0ec3d6c6-7655-4f90-b290-86ad0e201d8f
[1] => 1671630653-20221221-134503.jpg
)
[1] => Array
(
[0] => 0ec3d6c6-7655-4f90-b290-86ad0e201d8f
[1] => 1671630653-20221221-135652.jpg
)
[2] => Array
(
[0] => 0ec3d6c6-7655-4f90-b290-86ad0e201d8f
[1] => 1671630653-20221221-141137.jpg
)
.
.
.
[87] => Array
(
[0] => 1a8f3b9a-af6a-44be-b3f0-3e1c723f161e
[1] => 1669761126-20221129-204008.jpg
)
[88] => Array
(
[0] => 1a8f3b9a-af6a-44be-b3f0-3e1c723f161e
[1] => 1669761126-20221129-204017.jpg
)
[89] => Array
(
[0] => 1a8f3b9a-af6a-44be-b3f0-3e1c723f161e
[1] => 1669761126-20221129-204027.jpg
)
)
我想要得到的结构:
Array
(
[0ec3d6c6-7655-4f90-b290-86ad0e201d8f] => Array
(
[0] => 1671630653-20221221-134503.jpg
[1] => 1671630653-20221221-135652.jpg
[2] => 1671630653-20221221-141137.jpg
)
.
.
.
[1a8f3b9a-af6a-44be-b3f0-3e1c723f161e] => Array
(
[0] => 1669761126-20221129-204008.jpg
[1] => 1669761126-20221129-204017.jpg
[2] => 1669761126-20221129-204027.jpg
)
)
这可能非常简单,我很可能想得太多了,但我现在无法理解它。
$testArray = []; $result = array_values($newProcessedFileNames); foreach ($result as $row) { $string = explode('\', $row); $id = $string[0]; $testArray[$id][] = $string[1]; }
一个
foreach()
就可以完成工作:
$result = [];
foreach ($files as $file) {
$filename = substr($file, 0, strrpos($file, '.')) . '.jpg';
if (isset($filename)) {
$string = explode('\\', $filename);
$newProcessedFileNames[$string[0]][] = $string[1];
}
}
prettyPrint($result);