/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
delmængder
Fra : Anders


Dato : 18-03-10 13:05

Hej
Er der en hurtig måde til at tjekke om et array er en delmængde af
et andet array, uden at skulle lave en eller anden form for loop?

ex.
$a1 = array(2,3,5);
$a2 = array(1,2,3,4,5);

if ($a1 [er en delmængde af] $a2)
{
echo "a1 er en delmænge af a2";
}

 
 
Birger Sørensen (18-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 18-03-10 13:34

Anders tastede følgende:
> Hej
> Er der en hurtig måde til at tjekke om et array er en delmængde af et andet
> array, uden at skulle lave en eller anden form for loop?
>
> ex.
> $a1 = array(2,3,5);
> $a2 = array(1,2,3,4,5);
>
> if ($a1 [er en delmængde af] $a2)
> {
> echo "a1 er en delmænge af a2";
> }

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

$a3 = array_intersect( $a1,$a2);
if ( count( $a1) == count( $a2)) {
echo 'Jeps - delmængde!';
}

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Birger Sørensen (18-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 18-03-10 13:58

Birger Sørensen skrev:
> Anders tastede følgende:
>> Hej
>> Er der en hurtig måde til at tjekke om et array er en delmængde af et andet
>> array, uden at skulle lave en eller anden form for loop?
>>
>> ex.
>> $a1 = array(2,3,5);
>> $a2 = array(1,2,3,4,5);
>>
>> if ($a1 [er en delmængde af] $a2)
>> {
>> echo "a1 er en delmænge af a2";
>> }
>
> http://dk.php.net/manual/en/function.array-intersect.php
>
> $a3 = array_intersect( $a1,$a2);
> if ( count( $a1) == count( $a2)) {
> echo 'Jeps - delmængde!';
> }
>
> Birger

Skal sammenlignes med $a3 selvfølgelig...
if ( count( $a1) == count( $a3)) {

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Anders (18-03-2010)
Kommentar
Fra : Anders


Dato : 18-03-10 14:09

Birger Sørensen skrev:
> Birger Sørensen skrev:
>> Anders tastede følgende:
>>> Hej
>>> Er der en hurtig måde til at tjekke om et array er en delmængde af et
>>> andet array, uden at skulle lave en eller anden form for loop?
>>>
>>> ex.
>>> $a1 = array(2,3,5);
>>> $a2 = array(1,2,3,4,5);
>>>
>>> if ($a1 [er en delmængde af] $a2)
>>> {
>>> echo "a1 er en delmænge af a2";
>>> }
>>
>> http://dk.php.net/manual/en/function.array-intersect.php
>>
>> $a3 = array_intersect( $a1,$a2);
>> if ( count( $a1) == count( $a2)) {
>> echo 'Jeps - delmængde!';
>> }
>>
>> Birger
>
> Skal sammenlignes med $a3 selvfølgelig...
> if ( count( $a1) == count( $a3)) {
>
> Birger

Tak, det vil jeg prøve :)

Martin (18-03-2010)
Kommentar
Fra : Martin


Dato : 18-03-10 15:17

On 18-03-2010 13:34, Birger Sørensen wrote:
> Anders tastede følgende:
>> Hej
>> Er der en hurtig måde til at tjekke om et array er en delmængde af et
>> andet array, uden at skulle lave en eller anden form for loop?
>>
>> ex.
>> $a1 = array(2,3,5);
>> $a2 = array(1,2,3,4,5);
>>
>> if ($a1 [er en delmængde af] $a2)
>> {
>> echo "a1 er en delmænge af a2";
>> }
>
> http://dk.php.net/manual/en/function.array-intersect.php
>
> $a3 = array_intersect( $a1,$a2);
> if ( count( $a1) == count( $a2)) {
> echo 'Jeps - delmængde!';
> }

Dog skal det lige siges at det faktisk er hurtigere at lave det selv med
for løkker :)

Peter Farsinsen (18-03-2010)
Kommentar
Fra : Peter Farsinsen


Dato : 18-03-10 23:16

Martin wrote:

>> http://dk.php.net/manual/en/function.array-intersect.php
> Dog skal det lige siges at det faktisk er hurtigere at lave det selv med
> for løkker :)

Har du benchmarket det? ;)

--
Peter Farsinsen
peter@farsinsen.dk


Martin (19-03-2010)
Kommentar
Fra : Martin


Dato : 19-03-10 16:07

On 18-03-2010 23:15, Peter Farsinsen wrote:
> Martin wrote:
>
>>> http://dk.php.net/manual/en/function.array-intersect.php
>> Dog skal det lige siges at det faktisk er hurtigere at lave det selv med
>> for løkker :)
>
> Har du benchmarket det? ;)
>

array_intersect timed at: 1.0257320404053 seconds
my_array_intersect timed at: 0.29034399986267 seconds

<?php
function remove_random($array, $num = 100) {
   for($i = 0; $i < $num; $i++) {
      unset($array[rand(0,1000)]);
   }
   return $array;
}

function my_array_intersect($a,$b)
{
   for($i=0;$i<sizeof($a);$i++) $m[]=$a[$i];
   for($i=0;$i<sizeof($a);$i++) $m[]=$b[$i];
   sort($m);
   $get=array();
   for($i=0;$i<sizeof($m);$i++) {
      if($m[$i]==$m[$i+1]) $get[]=$m[$i];
   }
   return $get;
}

$array1 = range(0,1000);
$array2 = remove_random(range(0,1000));

$times = 100;


$starttime = microtime(true);
for($i = 0; $i < $times; $i++) {
   $result = array_intersect($array1, $array2);
}
echo 'array_intersect timed at: ' . (microtime(true) - $starttime) . '
seconds';

$starttime = microtime(true);
for($i = 0; $i < $times; $i++) {
   $result = my_array_intersect($array1, $array2);
}
echo '<br />';
echo 'my_array_intersect timed at: ' . (microtime(true) - $starttime) .
' seconds';

Martin (19-03-2010)
Kommentar
Fra : Martin


Dato : 19-03-10 16:09

On 19-03-2010 16:06, Martin wrote:
> On 18-03-2010 23:15, Peter Farsinsen wrote:
>> Martin wrote:
>>
>>>> http://dk.php.net/manual/en/function.array-intersect.php
>>> Dog skal det lige siges at det faktisk er hurtigere at lave det selv med
>>> for løkker :)
>>
>> Har du benchmarket det? ;)
>>
>
> array_intersect timed at: 1.0257320404053 seconds
> my_array_intersect timed at: 0.29034399986267 seconds
>
[SNIP]
> $array1 = range(0,1000);
> $array2 = remove_random(range(0,1000));

også prøvet med 4 arrays, 2 til hver funktion - her kommer samme tider ud :)

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste