php - 如果键以特定单词结尾,则通过函数调用修改值

标签 php arrays foreach reference key

我需要使用 php 更改关联数组中匹配键的所有值,但我只能通过匹配键中的特定字符串来定位键,而不是整个键名称,因为它可能会更改。

在下面的情况下,我需要一种方法来定位所有“_file”键并将其文件名更改为相关的附件 ID,但定位整个键“bg_infographic_file”是不可能的,因为该键可能会更改为“bg_whitepaper_file” “或其他名称。

当前$resources数组:

Array
(
    [0] => Array
        (
            [bg_infographic_title] => Logo Upload
            [bg_infographic_file] => logomark-large-forVector.png
        )

    [1] => Array
        (
            [bg_infographic_title] => Profile Image
            [bg_infographic_file] => ProfilePic.jpg
        )

    [2] => Array
        (
            [bg_infographic_title] => Document Upload
            [bg_infographic_file] => Test_PDF.pdf
        )

)

我需要的结果:

Array
(
    [0] => Array
        (
            [bg_infographic_title] => Logo Upload
            [bg_infographic_file] => 86390
        )

    [1] => Array
        (
            [bg_infographic_title] => Profile Image
            [bg_infographic_file] => 99350
        )

    [2] => Array
        (
            [bg_infographic_title] => Document Upload
            [bg_infographic_file] => 67902
        )

)

我正在考虑一些类似的事情,但我不太明白,因为以下内容只是返回未更改的数组数据:

foreach( $resources as $key=>$value ) {
    if( strpos($key, '_file') !== FALSE ) {
        $value = get_image_id_from_url($value);
    }
}

感谢您的帮助!

最佳答案

这样做:

foreach ($resources as $key => $value) {
    foreach ($value as $subKey => $subValue) {
        if (substr($subKey, -5) == '_file') {
            $resources[$key][$subKey] = get_image_id_from_url($subValue);
        }
    }
}

第一个问题是您有一个数组数组,而您仅循环访问外部数组。第二个问题是 $value 不能以这种方式在 foreach() 循环内修改。我们还可以使用 substr($key, -5) == '_file' 来确保 '_file' 位于字符串的末尾。

关于php - 如果键以特定单词结尾,则通过函数调用修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38299274/

相关文章:

javascript - 如何用另一个对象数组过滤对象数组并获得差异

javascript - 如何在 JavaScript 中访问数组的某些部分?

c# - 使用foreach很难从一大串数字中求和项目

php - MySQL:获取列出所有属性的产品

javascript - 刷新带有 <script> 标签的 div

php - 我应该在 PHP 中始终使用完全限定的类名吗?

PHP foreach 数组 - 保留键

php - 使用复合模式限制可以相互添加的对象类型

c++ - 3Sum 实现上的堆缓冲区溢出

javascript - angularjs foreach循环通过依赖于先前请求的http请求