我总是很难绕过这些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
包含一系列状态('setup' => 'active', 'artwork' => 'editing')
我想在$items
$this->progress
数组中每个匹配项的状态
$items = array(
array(
'step-name' => 'Setup',
'url' => '/projects/new/setup',
'status' => 'active',
),
etc...
);
答案 0 :(得分:1)
如果我正确理解你的问题,问题是你正在尝试向$ 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;
答案 1 :(得分:0)
您是否已锁定使用数组存储$ items?如果是这样,那么你将陷入一个嵌套循环(“对于$ this->进程中的每个元素,检查$ items中的每个元素。如果匹配,则更新$ items”或类似的东西)。如果你有一些灵活性,我会使用$ items的哈希值(php-speak中的关联数组),其中索引是步骤名称。所以$ items ['Setup']将包含'url'=> ......和'status'=> ......等有意义吗?然后你的算法分解为“对于$ this->进度中的每个元素,按名称获取$ items中的元素($ items [$ step_name])并更新它的信息。”
答案 2 :(得分:0)
我会改变你对$ 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;
}