A packing array is a b × k array of values from a g-ary alphabet such that given any two columns, i and j, and for all ordered pairs of elements from the g-ary alphabet, (g1, g2), there is at most one row, r, such that a<inf>r, i</inf> = g<inf>1</inf> and a<inf>r, j</inf> = g<inf>2</inf>. Further, there is a set of at least n rows that pairwise differ in each column: they are disjoint. A central question is to determine, for given g and k, the maximum possible b. We develop general direct and recursive constructions and upper bounds on the sizes of packing arrays. We also show the equivalence of the problem to a matching problem on graphs and a class of resolvable pairwise balanced designs. We provide tables of the best known upper and lower bounds.