未知数字的PHP函数(正则表达式类型)$childIds[] = X,$child->id

问题描述 投票:0回答:1

通常我最终会通过浏览 StackOverflow 找到解决方案,但在这里我却遇到了困难!

这是我在数据库中的类别结构

Parent category A (category_id = 1)
Child category B (category_id = 2)
Child category C (category_id = 3)
Child category D (category_id = 4)
Child category E (category_id = 5)

基本上我的 Joomla 扩展不允许您同时将页面分类为多个类别。 但我设法通过修改一些php文件并添加几个category_id值(用逗号分隔)来解决这个问题

我的代码有效。但时间太长了。我想简化一下。 我必须根据数字的位置创建所有场景。

我的代码:

// Get all child ids from this category
$categoryModel = ES::model('ClusterCategory');
$childs = $categoryModel->getChildCategories($activeCategory->id, [], SOCIAL_TYPE_PAGE, array('state' => SOCIAL_STATE_PUBLISHED));

$childIds = [];

foreach ($childs as $child) {
    $childIds[] = "1,$child->id";
    $childIds[] = "2,$child->id";
    $childIds[] = "3,$child->id";
    $childIds[] = "4,$child->id";
    $childIds[] = "5,$child->id";
    $childIds[] = "$child->id,1";
    $childIds[] = "$child->id,2";
    $childIds[] = "$child->id,3";
    $childIds[] = "$child->id,4";
    $childIds[] = "$child->id,5";   
    $childIds[] = "1,$child->id,2";
    $childIds[] = "2,$child->id,3";
    $childIds[] = "3,$child->id,4";
    $childIds[] = "4,$child->id,5";
    $childIds[] = "5,$child->id,1";
    $childIds[] = "2,$child->id,1";
    $childIds[] = "3,$child->id,2";
    $childIds[] = "4,$child->id,3";
    $childIds[] = "5,$child->id,4";
    $childIds[] = "1,$child->id,5";
    $childIds[] = $child->id;
}

我的问题: 如何插入变量而不是数字? 我尝试了正则表达式和许多其他东西。

就像一个未知数的方程一样。 $childIds[] = X,$child->id,X;

谢谢你, 菲利普

php foreach
1个回答
0
投票

你应该使用嵌套循环

$categoryModel = ES::model('ClusterCategory');
$childs = $categoryModel->getChildCategories($activeCategory->id, [], SOCIAL_TYPE_PAGE, array('state' => SOCIAL_STATE_PUBLISHED));

$childIds = [];

foreach ($childs as $child) {
    for ($i = 1; $i <= 5; $i++) {
        $childIds[] = "$i,$child->id";
        $childIds[] = "$child->id,$i";
        
        for ($j = 1; $j <= 5; $j++) {
            if ($i != $j) {
                $childIds[] = "$i,$child->id,$j";
            }
        }
    }
}

这样,你可以通过改变循环边界来轻松调整数字的范围,并且代码将更易于维护。

© www.soinside.com 2019 - 2024. All rights reserved.