La función
usort
, ordena los valores de una array usando una función definida por el usuario en la cual se especifique el criterio de ordenamiento. En este caso, se realiza el ordenamiento de los arrays contenidos en el array principal, de acuerdo al segundo valor de cada uno de ellos. Como son cadenas, se realiza el ordenamiento alfabético. El array que contiene a 'Action', queda primero porque empieza con la A y está antes que la P de 'Photo' y la F de 'Flash', pero como esta última está antes que la P de 'Photo', ahora ese array pasará a ser el segundo y el de 'Photo', el tercero. Por eso es que ahora
$productos[2][2]
, contiene el valor 10 que corresponde al array de 'Photo' que fue relegado al final.
Saludos