0
votes

I have 2 arrays, each of them var_dump()'ed below.

I've tried with array_intersect(), but nothing is returned, and no errors:

if (array_intersect($userInterests, $interests)) {
   echo "found";
}

Small array, $userInterests:

array(3) {
  [0]=>
  object(stdClass)#8 (1) {
    ["interestId"]=>
    string(1) "2"
  }
  [1]=>
  object(stdClass)#6 (1) {
    ["interestId"]=>
    string(1) "3"
  }
  [2]=>
  object(stdClass)#9 (1) {
    ["interestId"]=>
    string(1) "5"
  }
}

Large array, $interests:

array(15) {
  [0]=>
  object(stdClass)#2 (2) {
    ["interestName"]=>
    string(5) "Musik"
    ["interestID"]=>
    string(1) "1"
  }
  [1]=>
  object(stdClass)#11 (2) {
    ["interestName"]=>
    string(3) "Mad"
    ["interestID"]=>
    string(1) "2"
  }
  [2]=>
  object(stdClass)#12 (2) {
    ["interestName"]=>
    string(6) "Rejser"
    ["interestID"]=>
    string(1) "3"
  }
  [3]=>
  object(stdClass)#13 (2) {
    ["interestName"]=>
    string(10) "Mad Moneyz"
    ["interestID"]=>
    string(1) "4"
  }
  [4]=>
  object(stdClass)#14 (2) {
    ["interestName"]=>
    string(5) "Biler"
    ["interestID"]=>
    string(1) "5"
  }
  [5]=>
  object(stdClass)#15 (2) {
    ["interestName"]=>
    string(7) "Netflix"
    ["interestID"]=>
    string(1) "6"
  }
  [6]=>
  object(stdClass)#16 (2) {
    ["interestName"]=>
    string(26) "Lange gåture på stranden"
    ["interestID"]=>
    string(1) "7"
  }
  [7]=>
  object(stdClass)#17 (2) {
    ["interestName"]=>
    string(15) "Bjergbestigning"
    ["interestID"]=>
    string(1) "8"
  }
}

My goal is to mark select options as selected, like this:

<option value="<?php echo $interest->interestID; ?>"<?php echo (in_array($interest->interestID, $userInterests)) ? ' selected="selected"' : ''; ?>><?php echo $interest->interestName; ?></option>

$interest is the specific interest taken out from the bigger array, $interests

$userInterests is the smaller array

2
You should restructure your question to stress the fact that you actually want help marking the correct option as collected. Finding common values is another issue. - GregKos

2 Answers

0
votes

The issue is that your first array is actual an array of objects. And you are basically asking your PHP does this array of objects contain 3? This obviously is not a valid question. You need to convert the array of objects to a group of numbers.

From

array(3) {
  [0]=>
    object(stdClass)#8 (1) {
      ["interestId"]=>
        string(1) "2"
    }
  [1]=>
    object(stdClass)#6 (1) {
      ["interestId"]=>
        string(1) "3"
    }
  [2]=>
    object(stdClass)#9 (1) {
      ["interestId"]=>
        string(1) "5"
    }
}

To

array(3) {
  [0]=>
    string(1) "2"
  [1]=>
    string(1) "3"
  [2]=>
    string(1) "5"
}

First of all, convert your user's interests to a simple array.

$userInterestsSimple = array();
foreach ($userInterests as $userInterest)
    $userInterestsSimple[] = $userInterest->interestId;

Afterwards, your check with in_array() will work properly:

<option value="<?php echo $interest->interestID; ?>"
  <?php
    echo (in_array($interest->interestID, $userInterestsSimple)) ? ' selected="selected"' : '';
  ?>
>
    <?php echo $interest->interestName; ?>
</option>
0
votes

Merge them with array_merge() and compare the number of elements sizeof()

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

if(sizeof(array_merge($array1, $array2)) < sizeof($array1) + sizeof($array2))
    //Common values

To check if an element is in the array use in_array()