我的订单有这样的输入:
<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>
如果所有披萨输入都是空的,则不应打印标题“Pizza”!与“咖啡”或“三明治”组相同。如果订单中不包含任何内容,则不应打印标题。
我不能为每个输入编写特定的测试,因为我有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/>';
}
}
}
答案 0 :(得分:0)
也许从示例摘录中尝试recursion:
<?php
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator {
public function hasChildren() {
return is_array($this->current());
}
}
?>
否则一个简单的前进方式是假设你有三个或更多嵌套循环, 使用is_array()继续检查$ kv $ $,这是通过调用函数来完成的。
答案 1 :(得分:0)
试试这个
$booking = $_POST['booking'];
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 (is_array($qty)) {
foreach ($qty as $qt) {
if ($qty > "0"){
$order .= "<p><strong>" . ucfirst($name) . ":</strong> " . $qt. "</p>\n";
}
}
} else {
if ($qty > "0"){
$order .= "<p><strong>" . ucfirst($name) . ":</strong> " . $qty . "</p>\n";
}
}
}
}
}