首页 > 解决方案 > 在php的foreach循环中搜索动态键值

问题描述

我觉得我错过了一些非常简单的东西。在 php foreach 循环中迭代 $key 名称组合的最佳方法是什么——为每个名称做不同的事情?

我在一个数组中有许多值,它们的键值遵循相同的命名格式。

例子:

$rec_items['title3'] = implode($meta['title3']);
$rec_items['title4'] = implode($meta['title4']);
$rec_items['title5'] = implode($meta['title5']);

$rec_items数组还包含其他不遵循此命名约定(或数据类型)的值。

我正在$rec_items使用 foreach 循环进行循环。我希望能够动态循环通过 $rec_items 中的键名,并在找到匹配的键时“做某事” title*。我尝试将计数器变量中的数字推送到要搜索的键名中(如下所示):

foreach ($rec_items as $key => $value){
    $c = 0;
    if(!empty($key[${'title'.$c}]){
        $c++;
        //do something


}

我相信我无法将值传递给${'title'.$c}$key[]试图将值${'title'.$c}作为字符串传递而没有运气。

我只是分享上面的内容,试图突出我想要实现的目标。

(1) 以'title*' 格式动态循环键名

(2) 如果键名存在于$rec_items数组中......做一些事情。

标签: phparrayswordpressforeachkey-value

解决方案


我不确定您的原始代码在尝试什么;您似乎将数组键视为数组本身?使用变量变量?无论如何,您只需要对密钥进行简单的字符串搜索。您可以使用正则表达式或您喜欢的任何内容进行更复杂的匹配。

<?php
$rec_items = ["foo"=>12, "bar"=>34, "title1"=>56, "title2"=>78, "baz"=>90];
foreach ($rec_items as $k=>$v) {
    if (strpos($k, "title") === 0) {
        echo "$k = $v\n";
    }
}

输出:

title1 = 56
title2 = 78

推荐阅读