I want to remove rows from my array so that my result is an array that contains rows with unique first and last elements. If two (or more) rows have the same first and last value, I want to preserve the row with the lowest element count.
Say I have the following array:
$var = [
[1, 2, 3],
[1, 3],
[1, 2, 4, 3],
[1, 3, 4]
];
What I want is to remove all arrays from $var
that have the first and last element the same as another array from $var
but have more elements.
Because the first three rows all start with 1
and end with 3
, only the second row containing [1, 3]
should be kept.
The fourth row ([1, 3, 4]
) uniquely starts with 1
and ends with 4
, so it should also be kept.
The output should be:
[
[1, 3],
[1, 3, 4]
]
I am looking for the most efficient way of doing this, both in terms of memory and time. $var
may have up to 100 arrays, and each individual array may have up to 10 elements in it. I thought of using some kind of comparison between all two elements (for(i=0;...) for(j=i+1;...) complexCompareFunction();
), but I believe this isn't very efficient.
$var
in this case), I would like to delete those that use an extra line. So, if one can reach the second point with lines(1, 3)
, why should(1, 2, 3)
be displayed also? Here, line2
is extra, one can reach the destination without it. – Atahualpa