VHDL to store only unique elements in an array
Sorry to say but there are so many error here I don't know where to begin. Basically you make the common error I see with most beginners in VHDl/Verilog: You write code as if it is a computer program. It is not a computer program. It is a hardware simulation language. 
The most common errors I see (also here) are:


Not initializing variable using a reset
Re-using a variable multiple times
Mixing combinatorial and register sections
Thinking that modules/processes/architectures are some sort of 
functions which are called each time.


The last is the most common and biggest error which you have to get out of your mind. Code represent hardware which will be 'instanced' and then needs to be fed data into and you have to catch what comes out. And all your hardware in all your files works at the same time. 

I am not going to rewrite the code. I can give you some tips and guidance:


Find VHDL code from others and study what they do. Try to understand why they do things that way.
Add a clock and a reset, you have neither.
Stop initialing your variables: "signal i: integer := 0;" works only in test benches. In fact I deplore the whole idea and would like to see in removed from VHDL.
Separate your control from your data. Thus split the code into two parts. One part checks if the data is already in the array. The other part which stores the data if it is not. Hint: The part which compares has a single output: hit/miss.
Now that you have a clock decide how fast your compare should be. One clock cycle, two clock cycles, 8 clock cycles? It will depend on your data flow. How often does a new data item arrive.
Building on that you have to implement code for 8, 4 or one compare at a time.




Post edit: initialisation
There are some comment about initialisation. Let me elaborate on that a bit more.
As mentioned initialisation in behavioral code is fine. It will work in most FPGAs if you use zero but it will never work in ASIC (my background). 
But in all cases the user must be very carefull and realise what they are doing. Now let me take an example based on the above code:

process(...)
variable found_it std_logic := '0';


The misconception is that this is equivalent to C:

void proces(...)
{ int found_it = 0;


But it is in fact closer to:

void proces(...)
{ static int found_it = 0;


The variable is set to zero once and once only: when the code is instanced.
If you then set it to '1' in a loop it does not get reset again.
It is a potential pitfall for programmers who come from a software background.