Well, you have at least one problem with that new script. First, they all have the exact same name, so you will only get one value returned. I'm not really sure what you are going for, but chances are you want either this:
<tr><td><img src="images/icon_recommend.gif" width="12" height="12" alt="" border="0"></td><td>4x6</td><td>
<input type="text" size="2" maxlength="3" name="purchase[0][qty]" value="0">
</td></tr>
<tr><td><img src="images/icon_notrecommend.gif" width="12" height="12" alt="" border="0"></td><td>5x7</td><td>
<input type="text" size="2" maxlength="3" name="purchase[1][qty]" value="0">
</td></tr>
<tr><td><img src="images/icon_notrecommend.gif" width="12" height="12" alt="" border="0"></td><td>8x10</td><td>
<input type="text" size="2" maxlength="3" name="purchase[2][qty]" value="0">
</td></tr>
in which case you would go through it all like this:
foreach ($purchase as $value){
echo "<b>" . $value[qty] . "</b> | ";
}
or this:
<tr><td><img src="images/icon_recommend.gif" width="12" height="12" alt="" border="0"></td><td>4x6</td><td>
<input type="text" size="2" maxlength="3" name="purchase[0][qty][]" value="0">
</td></tr>
<tr><td><img src="images/icon_notrecommend.gif" width="12" height="12" alt="" border="0"></td><td>5x7</td><td>
<input type="text" size="2" maxlength="3" name="purchase[0][qty][]" value="0">
</td></tr>
<tr><td><img src="images/icon_notrecommend.gif" width="12" height="12" alt="" border="0"></td><td>8x10</td><td>
<input type="text" size="2" maxlength="3" name="purchase[0][qty][]" value="0">
</td></tr>
which would go like this:
foreach ($purchase[0][qty] as $value){
echo "<b>" . $value . "</b> | ";
}
I have no idea what your first for loop is for, and please bear in mind that (as they are listed) they both use the same variable, $value. I don't know if it's because it doesn't matter, you didn't notice, or just because those are example names, but I thought I would point it out anyway.