3 回答
TA贡献1854条经验 获得超8个赞
这是因为在所有情况下$structure->parts[0]都不匹配$structure->parts[$i]->disposition == 'attachment'。
仅在正确时才在数组中创建新项目,并且不要使用循环计数器使用简单$arr[]构造来创建下一次出现
$attachments = array();
if(isset($structure->parts) && count($structure->parts)) {
foreach ($structure->parts as $part) {
if (($part->ifdisposition) && ($part->disposition == 'attachment')) {
foreach($part->parameters as $obj) {
if(strtolower($obj->attribute) == 'name') {
$t['is_attachment'] = true;
$t['name'] = $obj->value;
$t['attachment'] = '';
$attachments[] = $t
}
}
}
}
}
TA贡献1868条经验 获得超4个赞
如果您想知道为什么数组的索引以 1 开头而不是 0,请向我们展示数组的定义。但是您也可以通过使用 PHP array_keys函数获取数组键来使用 for 循环循环使用未知键的数组
$this->arr = [1 => 'one', 2 => 'two', 3 => 'three'];
$keys = array_keys($this->arr);
for($i = 0; $i < count($keys); $i++) {
$value = $this->arr[$keys[$i]];
echo 'val: ' .$value.'<br>';
}
或者你可以将两个 foreaches 包装成另一个
foreach($structure->parts as $key => $part){
$part->ifdisposition = true;
$part->disposition = 'attachment';
if (($part->ifdisposition) && ($part->disposition == 'attachment')) {
foreach($part->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$key]['is_attachment'] = true;
$attachments[$key]['name'] = $object->value;
$attachments[$key]['attachment'] = '';
}
}
}
}
另一种选择是使用array_map重新映射数组的键,但您的数组将被更改,因此如果您需要原始数组,您可以将其缓存到另一个变量中。
TA贡献1826条经验 获得超6个赞
这里:
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
$attachments[$i]['attachment'] = '';
您将键设置为$i,因此$structure->parts匹配条件的第一个元素是循环中的第二个元素。要设置$attachments从零开始的数组,您只需要让 PHP 自己创建键:
$attachments[] = ['is_attachment' => true, 'name' => $object->value, 'attachment' => ''];
- 3 回答
- 0 关注
- 223 浏览
添加回答
举报