I’m trying to target the index of my array. For some reason my array turns out really weird.
JavaScript
x
foreach ($name as $n) {
for ($x = 0; $x < count($mednames); $x++) {
if (in_array($n, $mednames[$x])) {
$duplicaten[] = $n;
break;
}
}
}
$cnt = array_count_values($duplicaten);
foreach ($cnt as $c) {
if ($cnt > 1) {
echo '<h2 style="color: gray;">';
print_r($c);
echo '</h2>';
}
}
Now I get the results I need. But I need the name of each index too.
Results:
var export – $name:
JavaScript
array (
0 => 'Ibuprofen',
1 => 'Ibuprofen',
2 => 'Penicillin',
3 => 'Penicillin',
4 => 'Penicillin',
5 => 'Adderall',
)
var_export – $mednames:
JavaScript
array (
0 => array ( 'name' => 'xxxx1', 'med_name' => 'Ibuprofen', ),
1 => array ( 'name' => 'xxxx2', 'med_name' => 'Ibuprofen', ),
2 => array ( 'name' => 'xxxx3', 'med_name' => 'Penicillin', ),
3 => array ( 'name' => 'xxxx4', 'med_name' => 'Penicillin', ),
4 => array ( 'name' => 'xxxx5', 'med_name' => 'Penicillin', ),
5 => array ( 'name' => 'xxxx6', 'med_name' => 'Adderall', ),
)
var_export – $cnt:
JavaScript
array ( 'Ibuprofen' => 2, 'Penicillin' => 3, 'Adderall' => 1, )
var_export – $c:
JavaScript
2
3
Now the problem here is that I need to have the name of each medicine in the $c variable/array, because I need the name of the medicine to get more information from the api. But the problem is I’m only getting the count for it. Is there a workaround for this? This is really bugging me. I’ve been stuck on this for hours.
Advertisement
Answer
You need to access the key in the second foreach:
JavaScript
<?php
$name = array (
0 => 'Ibuprofen',
1 => 'Ibuprofen',
2 => 'Penicillin',
3 => 'Penicillin',
4 => 'Penicillin',
5 => 'Adderall',
);
$mednames = array (
0 => array ( 'name' => 'xxxx1', 'med_name' => 'Ibuprofen', ),
1 => array ( 'name' => 'xxxx2', 'med_name' => 'Ibuprofen', ),
2 => array ( 'name' => 'xxxx3', 'med_name' => 'Penicillin', ),
3 => array ( 'name' => 'xxxx4', 'med_name' => 'Penicillin', ),
4 => array ( 'name' => 'xxxx5', 'med_name' => 'Penicillin', ),
5 => array ( 'name' => 'xxxx6', 'med_name' => 'Adderall', ),
);
foreach ($name as $n) {
for ($x = 0; $x < count($mednames); $x++) {
if (in_array($n, $mednames[$x])) {
$duplicaten[] = $n;
break;
}
}
}
$cnt = array_count_values($duplicaten);
print_r($cnt);
/* prints
Array
(
[Ibuprofen] => 2
[Penicillin] => 3
[Adderall] => 1
)
*/
// again do foreach with $key => $value
foreach ($cnt as $name => $c) {
if ($cnt > 1) {
echo '<h2 style="color: gray;">';
print($c);
print('-');
print($name);
echo '</h2>';
}
}
/* prints:
<h2 style="color: gray;">2-Ibuprofen</h2><h2 style="color: gray;">3-Penicillin</h2><h2 style="color: gray;">1-Adderall</h2>
*/
You can test this in php Sandbox, that this is in fact correct behaviour: