la differenza è che prima sovrascrivevi ad ogni cilo l'array,
usando asd[], ogni elemento di array è un array


Codice PHP:
<?php

$tutto 
"user /-%EOF%-/ oggetto /-%EOF%-/ contenuto /-%EOF%-/ 1 [mess] user /-%EOF%-/ oggetto /-%EOF%-/ contenuto /-%EOF%-/ 2 [mess]user /-%EOF%-/ oggetto /-%EOF%-/ contenuto /-%EOF%-/ 3 [mess]"

$sd explode("[mess]"$tutto); //explodo tutti i messaggi 
//print_r ($sd);

 
foreach($sd as $item){
    if(
trim($item)=='') continue;
    
$temp explode("/-%EOF%-/"$item); 
    
$key = (int) $temp[3];
    
$asd[$key] = $temp;

echo 
'<pre>';
print_r ($asd);
echo 
'</pre>';

$id_da_elimiare 1;
unset(
$asd[$id_da_elimiare]);

echo 
'<pre>';
print_r ($asd);
echo 
'</pre>';

foreach(
$asd as $item){
    
$asddd .= implode("/-%EOF%-/"$item).'[mess]';
}
echo 
$tutto;
echo 
'<hr />';
echo 
$asddd;

?>