如何根据第一个相同的值组合二维数组的内部数组?

问题描述 投票:0回答:2
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
        )
)

这可能非常简单,我很可能想得太多了,但我现在无法理解它。

php arrays multidimensional-array
2个回答
1
投票
$testArray = [];
$result = array_values($newProcessedFileNames);
foreach ($result as $row) {
    $string = explode('\', $row);
    $id = $string[0];
    $testArray[$id][] = $string[1];
}

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);
© www.soinside.com 2019 - 2024. All rights reserved.