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 關注
- 252 瀏覽
添加回答
舉報