Php 添加到键等于变量的数组

Php 添加到键等于变量的数组,php,multidimensional-array,foreach,Php,Multidimensional Array,Foreach,我总是很难理解这些foreach数组的东西,所以在让我到达那里的过程中,这是一个非常有价值的资源,所以我希望你们能帮我解决这个问题 public function progress_bar() { $items = array( array( 'step-name' => 'Setup', 'url' => '/projects/new/setup/', ), array(

我总是很难理解这些foreach数组的东西,所以在让我到达那里的过程中,这是一个非常有价值的资源,所以我希望你们能帮我解决这个问题

public function progress_bar()
{

    $items = array(
        array(
            'step-name' => 'Setup',
            'url' => '/projects/new/setup/',
        ),
        array(
            'step-name' => 'Artwork',
            'url' => '/projects/new/artwork/',
        ),
        array(
            'step-name' => 'Review',
            'url' => '/projects/new/review/',
        ),
        array(
            'step-name' => 'Shipping',
            'url' => '/projects/new/shipping-info/',
        ),
        array(
            'step-name' => 'Billing',
            'url' => '/projects/new/billing/',
        ),
        array(
            'step-name' => 'Receipt',
            'url' => '/projects/new/receipt/',
        ),
    );

    // Status can be active, editing, or complete.

    foreach ($this->progress as $step => $status)
    {
        foreach ($items as $item)
        {
            $item['step-name'] == ucfirst($step) ? $item['status'] = $status : '';
        }
    }

    return $items;
}
$this->progress
包含一系列状态
(“设置”=>“活动”、“艺术品”=>“编辑”)

我想在
$items
数组中添加
$this->progress

$items = array(
    array(
        'step-name' => 'Setup',
        'url' => '/projects/new/setup',
        'status' => 'active',
    ),
    etc...
);

您是否已锁定使用数组来存储$items?如果是这样的话,您将陷入嵌套循环(“对于$this->progress中的每个元素,检查$items中的每个元素。如果匹配,则更新$items”或类似内容)。如果您有一些灵活性,我将使用$items的哈希(php语言中的关联数组),其中索引是步骤名称。所以$items['Setup']将包含'url'=>。。。和“状态”=>。。。等等,这有意义吗?然后,您的算法将分解为“对于$this->progress中的每个元素,按名称获取$items中的元素($items[$step_name]),并更新其信息。”

如果我正确理解您的问题,问题是您正试图将数组元素添加到$items中,但实际操作是将元素添加到临时变量中($item),它不引用原始$items变量

我建议这样做:

foreach ($this->progress as $step => $status)
{
    // Having the $key here allows us to reference the
    // original $items variable.
    foreach ($items as $key => $item)
    {
        if ($item['step-name'] == ucfirst($step) )
        {
            $items[$key]['status'] = $status;
        }
    }
}

return $items;

我会改变$items数组的键控方式,并这样做。阻止您使用嵌套循环

public function progress_bar()
{

    $items = array(
        'Setup' => array(
                'url' => '/projects/new/setup/',
               ),
        'Artwork' => array(
                    'url' => '/projects/new/artwork/',
                ),
        'Review' => array(
                    'url' => '/projects/new/review/',
                ),
        'Shipping' => array(
                    'url' => '/projects/new/shipping-info/',
                ),
        'Billing' => array(
                    'url' => '/projects/new/billing/',
                ),
        'Receipt' => array(
                    'url' => '/projects/new/receipt/',
                )
    );

    // Status can be active, editing, or complete.

    foreach ($this->progress as $step => $status)
    {
        $item[ucfirst($step)]['status'] = $status;
    }

    return $items;
}

是的,你的理解是正确的,是的,我承认这是暂时的,但不知道如何使它永久化,是的,你统治并拯救了这一天!!在所有方面都很出色!