si scusa, ho copiato il codice di un sito in cui uso codeigniter invece di un altro.

cmq la tua intuizione è giusta.
i due array hanno dimensioni diverse e quindi si sposta.
ho provato a fare una cosa del genere (ti metto un codice forse più pulito):
Codice PHP:
<table class="tb_ordine">
    <thead>
        <tr>
            <?php
            $tgArray 
= array();
            foreach (
$objConnCerca->getTaglie($rigord['articolo_codice']) as $tg):
                
?>
                <th>
                    <?php
                    $tgArray
[] = $tg['taglia_codice'];
                    echo 
$tg['taglia_codice'];
                    
?>
                </th>
            <?php endforeach; ?>
        </tr>
        <tr>
            <?php
            $qtaTotRiga 
NULL;
            foreach (
$objConnCerca->getRigordStoricoQt($_GET['tesord'], $_GET['cliente'], $rigord['articolo_codice'], $rigord['articolo_colcod']) as $qt):
                
?>
                <th>
                    <?php
                    $qtaTotRiga 
+= $qt['rigord_qta'];
                    if (
in_array($qt['taglia_codice'], $tgArray)) {
                        echo 
$qt['rigord_qta'];
                    } else {
                        echo 
'NO';
                    }
                    
?>
                </th>
            <?php endforeach; ?>
        </tr>
    </thead>
</table>
prima ho creato un array con tutte le taglie.
poi sotto controllo che quella taglia sia nell'array, e a seconda del risultato stampo una cosa o un'altra.
però il risultato è lo stesso.