what you talked about in your origional post, and your new post, are different things.
What you posted:
type arr is array (6 downto 0) of std_logic_vector(6 downto 0);
is not a 2D array. It is a 1d array of a 1d array type. This you can access with:
my_array(a)(b).
But what you can also do is access ranges. You can only access ranges in 1d arrays:
output <= my_array(a)(3 downto 0);
in your next post, you have a 2d array:
type arr is arrray(natural range<>, natural range <>) of integer;
which you access like this:
output <= my_array(i,j);
Each dimension is separated with a comma. You cannot access ranges inside the index, every element has to be accessed individuall, so (j downto 0) is illegal here.
what you will have to do is:
for k in j downto 0 loop
temp(k) <= and_1(i, k);
end loop;