gpt4 book ai didi

php - 在PHP中循环遍历不同长度的数组

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:19 24 4
gpt4 key购买 nike

我有一个包含如下输入的订单:

<input type="text" name="booking[Sandwich][Roastbeef][qty]"  />
<input type="text" name="booking[Sandwich][Cheese][qty]" />
<input type="text" name="booking[Pizza][Classic][qty]" />
<input type="text" name="booking[Pizza][Special][qty]" />
<input type="text" name="booking[Coffee][qty]" />

我在正确循环数组时遇到问题。

这是我想要的输出类型:

<h2>Sandwich</h2>
<p><strong>Roastbeef:</strong> 10</p>
<p><strong>Cheese:</strong> 5</p>

<hr>
<h2>Coffee</h2>
<p><strong>Quantity:</strong> 15</p>

如果所有的披萨输入都是空的,标题“披萨”不应该被打印出来! “咖啡”或“三明治”组也是如此。如果订单不包含组中的任何内容,则不应打印标题。

我无法为每个输入编写特定的测试,因为我有 200 个。

这是我尝试做的:

$booking = $_POST['booking'];   

//First check if there is one or more input that is not empty
if (!empty($booking)) {

foreach ($booking as $type => $items) {
if (count(array_filter($items))) {
$order .= "<hr>\n<h2>" . ucfirst($type) . ":</h2>\n";
}
foreach ($items as $name => $qty) {
if ($qty > "0"){
$order .= "<p><strong>" . ucfirst($name) . ":</strong> " . $qty . "</p>\n";
}
}
}
}

此代码仅在数组长度为两个键时有效。我似乎无法思考如何处理其他长度。任何帮助都会很棒!

编辑:

有了@treegarden 的回答,我几乎得到了我需要的东西。现在我只需要检查“组”是否为空,然后是 <h2>不应打印。 if (count(array_filter($entry)))如果组为空,则不打印任何内容,但仅针对那些只有两个键的输入。

if (!empty($booking)) {

foreach($booking as $key=>$entry) {
if (count(array_filter($entry))) {

echo "<h2>$key</h2>"; //Should only be printed if one or more inputs in the group are not empty

foreach($entry as $key=>$subEntry) {
if(is_array($subEntry) && $subEntry['qty'] > 0) {
echo "<p><strong>$key:</strong>" . $subEntry['qty'] . "</p>";
} elseif(!is_array($subEntry) && $subEntry > 0) {
echo "<p><strong>Quantity:</strong> $subEntry</p>";
}
}
echo '<hr/>';
}
}


}

最佳答案

也许试试 recursion ,来自示例片段:

<?php
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator {
public function hasChildren() {
return is_array($this->current());
}
}
?>

否则一个简单的前向方法是假设你有三个或更多的嵌套循环,使用 is_array() 继续检查 $kv 中的 $value ,这是通过调用一个函数来完成的。

关于php - 在PHP中循环遍历不同长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com