Reputation: 482
I am trying to get an a value of id assigned to an array element. The problem I am having is that it will assign one id every 70 loops through the foreach. I am not quite sure what I am doing wrong on this one.
$search = 'echem';
$data = array();
$tags = null;
$i = 0;
//var_dump($this->videos);
foreach ($this->videos as $key => $value) {
foreach ($value as $key => $value) {
if ($key === 'id') {
$data[$i]['id'] = (int)$value;
}
if ($key == 'tags') {
$tags = explode(',', $value);
}
//echo $key . ' - ';
if (is_array($tags)) {
foreach ($tags as $key => $value) {
if (strtoupper($value) == strtoupper($search)) {
//echo 'Search Found <br/>';
$data[$i]['found'] = 1;
}
//echo $value.', ';
}
//echo '<br/>';
}
if (!isset($data[$i]['found'])) {
$data[$i]['found'] = 0;
}
$data[$i]['subId'] = $i;
$i++;
}
}
as you can see im checking to see if the $key is id on line 8 with the following code:
if ($key === 'id') {
$data[$i]['id'] = (int)$value;
}
I then run through the rest of the loop which appears to run through just fine and assign everything as needed. The key id is the first key in every loop through so why its not assigning it has me stumped. Any help is much appreciated.
output of var_dump():
array (size=58086)
0 =>
array (size=3)
'id' => int 1
'found' => int 0
'subId' => int 0
1 =>
array (size=2)
'found' => int 0
'subId' => int 1
2 =>
array (size=2)
'found' => int 0
'subId' => int 2
3 =>
array (size=2)
'found' => int 0
'subId' => int 3
4 =>
array (size=2)
'found' => int 0
'subId' => int 4
5 =>
array (size=2)
'found' => int 1
'subId' => int 5
6 =>
array (size=2)
'found' => int 0
'subId' => int 6
7 =>
array (size=2)
'found' => int 0
'subId' => int 7
Upvotes: 0
Views: 295
Reputation: 173542
I was a bit bored, so I rewrote your code:
I've renamed the as $key => $value
to more sensible names.
I've removed the middle foreach
loop, because a simple array reference and isset()
suffices.
Applying strtoupper()
to $search
before the loop starts (avoids having to do this multiple times).
Result:
$search = 'echem';
$data = array();
$i = 0;
$search = strtoupper($search);
foreach ($this->videos as $video) {
if (!isset($video['id'], $video['tags'])) {
continue; // skip records you can't use
}
// populate the `$data` entry
$data[$i]['id'] = $video['id'];
$data[$i]['tags'] = explode(',', $video['tags']);
// find a match in the tags
$data[$i]['found'] = 0;
foreach ($data[$i]['tags'] as $tag) {
if (strtoupper($tag) == $search) {
$data[$i]['found'] = 1;
}
}
$data[$i]['subId'] = $i;
$i++;
}
Upvotes: 3