php - 如何使 PHP 中未定义的值为 false?
问题描述
我正在使用带有远程 api 的 laravel。您可以选择附加多封电子邮件。这些电子邮件具有单选按钮和复选框选项。But they don't always have to be elected. 这就是我收到此错误的原因。以下是带有代码的示例。如果你能帮助我,我会很高兴。
如果在第二封电子邮件中未选择任何内容,我会收到此错误。
Undefined offset: 1
html
<div class="form-group">
<label for="name">E-posta</label>
<div class="input-group">
<input type="email" class="form-control email-address" name="email[]" placeholder="E-Posta giriniz">
<div class="btn-group">
<label class="btn btn-default">
<input class="primary-radio" type="radio" name="primaryEmail" value="0" checked autocomplete="off"> <span class="fas fa-star"></span>
</label>
<label class="btn btn-default">
<input class="ban-checkbox" type="checkbox" name="optOut[]" value="0" autocomplete="off"> <span class="fas fa-ban"></span>
</label>
<label class="btn btn-default">
<input class="invalid-checkbox" type="checkbox" name="invalid[]" value="0" autocomplete="off"> <span class="fas fa-exclamation-circle"></span>
</label>
</div>
</div>
</div>
php
// Emails
$emails = $request->input('email');
$primaryEmail = $request->input('primaryEmail');
$optOut = $request->input('optOut');
$invalid = $request->input('invalid');
$emailAddresses = array();
$e = 0;
foreach ($emails as $emailKey => $emailValue) {
$emailAddresses[$emailKey] = [
'emailAddress' => $emailValue,
'invalid' => (intval($invalid[$e]) == $emailKey) ? true : false,
'lower' => $emailValue,
'optOut' => (intval($optOut[$e]) == $emailKey) ? true : false,
'primary' => (intval($primaryEmail) == $emailKey) ? true : false,
];
$e++;
}
dd($emailAddresses);
数组输出
array:2 [▼
0 => array:5 [▼
"emailAddress" => "test@live.com"
"invalid" => true
"lower" => "test@live.com"
"optOut" => true
"primary" => true
]
1 => array:5 [▼
"emailAddress" => "hi@test.com"
"invalid" => true
"lower" => "hi@test.com"
"optOut" => true
"primary" => false
]
]
解决方案
在您基于 HTML 的情况下,例如,当您有 3 封电子邮件时:
电子邮件 1 < 已选中所有框
电子邮件 2 < 仅选中了 optOut 复选框
电子邮件 3 < 仅选中了 2 个复选框
您的结果将如下所示:
[
'email' => [
0 => 'Email1',
1 => 'Email2',
2 => 'Email3'
],
'primaryEmail' => 0,
'optOut' => [
0 => 0,
1 => 0,
2 => 0
],
'invalid' => [
0 => 0,
1 => 0
]
]
您目前面临的最大问题是您的密钥永远无法与不同的组合匹配。
解决此问题的一种方法是已经在 HTML 中使用了一个键:
<div class="form-group">
<label for="name">E-posta</label>
<div class="input-group">
<input type="email" class="form-control email-address" name="email[<SOME KEY HERE>]" placeholder="E-Posta giriniz">
<div class="btn-group">
<label class="btn btn-default">
<input class="primary-radio" type="radio" name="primaryEmail" value="0" checked autocomplete="off"> <span class="fas fa-star"></span>
</label>
<label class="btn btn-default">
<input class="ban-checkbox" type="checkbox" name="optOut[<SOME KEY HERE>]" value="0" autocomplete="off"> <span class="fas fa-ban"></span>
</label>
<label class="btn btn-default">
<input class="invalid-checkbox" type="checkbox" name="invalid[<SOME KEY HERE>]" value="0" autocomplete="off"> <span class="fas fa-exclamation-circle"></span>
</label>
</div>
</div>
</div>
所有字段的 SOME KEY HERE 必须相同(如果您想跟踪主字段所属的电子邮件,即使是 primaryEmail 字段)。
推荐阅读
- html - Github 页面未显示我的 CSS 的图标和图像
- javascript - Angular Jasmine 这个服务方法不是一个函数
- reactjs - 如何自定义 React 本机 TextInput 的高度?
- gradle - 如何简单地将最终构建 AAR 复制到目标目录并重命名它?
- python - 使用 python 扫描 SQL Server 中的单个列以获取数据条目
- html - Laravel Blade:HTML Checkbox 设置为 true 但仍未选中
- python - 在另一个魔术方法中使用一个魔术方法
- mongodb - 从 NoSQL 数据库中的两个(或多个)模式查询数据的最佳实践
- reactjs - Next js中如何为嵌套动态路由命名页面模板?
- javascript - 滚动到页面底部 loadMore 被多次调用