Matematica informatica - insiemi ed array: appartenenza, inclusione ed intersezione

Apriamo un piccolo corso di matematica applicata all'informatica,
ovvero ripercorriamo i passi dell'algebra passando dalle esigenze pratiche che l'informatica spesso ci chiede.



Speriamo che questo piccolo corso possa esservi di aiuto nei vostri studi.

Cominciamo oggi con i fondamenti dell'aritmetica, ovvero gli INSIEMI.


Secondo i principi base dello studio degli insiemi,
https://it.wikipedia.org/wiki/Teoria_degli_insiemi

vediamo le caratteristiche principali degli insiemi:


1. APPARTENENZA
 (simbolo {\displaystyle \in })

https://it.wikipedia.org/wiki/Appartenenza

se scriviamo a {\displaystyle \in } X

Vuol dire che l'elemento "a" appartiene al Insieme "X"


caso di NON APPARTENENZA:

{\displaystyle a\notin X}


ESEMPIO: 
Se abbiamo un Insieme X {a,b,c,d,e}
possiamo scrivere quindi che a appartiene ad X

e che f non appartiene ad X


ESEMPIO PRATICO IN PHP 

http://php.net/manual/it/function.in-array.php


in_array()

Per vedere se un elemento è presente in un array, considerato qui come un insieme, utilizziamo la funzione in_array() di php



<?php

$a = array('1','2','3','4','5','6'); 
 
 if (in_array('4', $a)) {
    echo "4 appartiene ad A";
 }
 else
 {
 echo "4 NON appartiene ad A";
 }



Ovvero:  4 {\displaystyle \in } A




2. INCLUSIONE 

https://it.wikipedia.org/wiki/Inclusione


\subseteq

Dove B è un sottoinsieme di A

A = {1,2,3,4,5,6}
B = {1,2,3}

Ovvero:  B \subseteq A






3. INTERSEZIONE

https://it.wikipedia.org/wiki/Intersezione_(insiemistica)

Questo è uno dei casi più interessanti per lo sviluppo php.

Simbolo:  \cap  


https://it.wikipedia.org/wiki/File:Venn_A_intersect_B.svg#metadata




Una intersezione è costituito da quegli elementi che appartengono sia All'insieme A che all'insieme B.


nello specifico, "A" intersecato a "B" = "C"

Ovvero:         C = A \cap  


Nel nostro caso pratico, è interessante vedere quali sono le funzioni di php che ci vengono in aiuto nel confronto di due insiemi (array):


ESEMPIO PRATICO IN PHP

array_intersect()

 
<?php

$array1 = array(2, 4, 6, 8, 10, 12,23,33,77);
$array2 = array(1, 2, 3, 4, 5, 6,11,12,15,20); 


$result = array_intersect($array1, $array2);
print_r($result); 



Se provate a lanciare questo script, vedrete che vengono estrapolati gli elementi comuni ad i 2 insiemi- array. ovvero

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [5] => 12
)


quindi 2, 4,12     = C

In questo caso specifico, vediamo come in calcolo sia fatto dentro l'array1, ed il risultato mostra quali valori key/value sono presenti nell'array2, stampando però dall'array 1. [0] ..[5]



Se vogliamo vedere distintamente quali elementi sono presi dai rispettivi array, possiamo scrivere in questo modo:

Esempio 2 $array1 = array(2, 4, 6, 8, 10, 12); $array2 = array(1, 2, 3, 4, 5, 6);
$array1 = array(2, 4, 6, 8, 10, 12);
$array2 = array(1, 2, 3, 4, 5, 6);

var_dump(array_intersect($array1, $array2));

var_dump(array_intersect($array2, $array1));

Che mostrerà questo output:
Esempio 2.a
array(3) { [0]=> int(2) [1]=> int(4) [2]=> int(6) }

Esempio 2.b
array(3) { [1]=> int(2) [3]=> int(4) [5]=> int(6) } 
Dove possiamo vedere la posizione dei singoli elementi rispettivamente in array1 ed array2.

Naturalmente funziona anche con più Insiemi-array:
$array1 = array(2, 4, 6, 8, 10, 12,23,33,77);
$array2 = array(1, 2, 3, 4, 5, 6,11,12,15,20); 
$array3 = array(51, 42, 3, 4, 65, 6,111,12,15,20,645); 

$result3 = array_intersect($array1, $array2, $array3);
print_r($result3); 



Risultato degli elementi comuni fra i 3 array - insiemi:
Array ( [1] => 4 [2] => 6 [5] => 12 ) 




array_intersect_assoc() 

C'è anche la possibilità di fare il confronto fra value e key, non solo del valore

 

$array1 = array("nome" => "Mario", "cognome" => "Rossi", "soprannome1" => "Rex", "valore1", "valore2");
$array2 = array("nome" => "Mario", "cognome" => "Verdi", "soprannom2"=> "Rex", "valore1", "valore3");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
Risultato degli elementi comuni fra i 2 array - insiemi con key e value :
Array ( [nome] => Mario [0] => valore1 ) 

In questo caso l'accoppiata key->value "nome->Mario" sono uguali in entrambi gli array (e solamente questa coppia).

array_intersect_key()


Se invece c'è bisogno di sapere solo quali sono le Key in comune, si può utilizzare la funzione php array_intersect_key()
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_intersect_key($array1, $array2));

Risultato:
array(2) { ["blue"]=> int(1) ["green"]=> int(3) } 

In questo caso le key "blue" e "green" sono KEY presenti in entrambi gli array



E' possibile aggiungere delle funzioni di controllo all' intersect con

array_uintersect()

http://php.net/manual/en/function.array-uintersect.php


E' possibile aggiungere delle funzioni di controllo al confronto sulla KEY o sul VALUE con le funzioni:

array_intersect_uassoc()

http://php.net/manual/en/function.array-intersect-uassoc.php

array_intersect_ukey()

http://php.net/manual/en/function.array-intersect-ukey.php