1

I want the array to merge into a key value pair. look at the example below

Here is my code and array $aExtraFilter

array (size=4)
  0 => 
    array (size=2)
      'key' => string 'CookTech' (length=8)
      'value' => string 'Broil' (length=5)
  1 => 
    array (size=2)
      'key' => string 'CookTech' (length=8)
      'value' => string 'Pan Fry' (length=7)
  2 => 
    array (size=2)
      'key' => string 'CookSkills' (length=10)
      'value' => string 'Intro' (length=5)
  3 => 
    array (size=2)
      'key' => string 'CookSkills' (length=10)
      'value' => string 'Knife Skills' (length=12)

Here is my code:

    $aExtraFilter2 = [];
    $extrafilterkey = '';
    $extrafiltervalue = [];
    foreach ($aExtraFilter as $key => $value) {
        $extrafilterkey = $value['key'];
        $aExtraFilter2[$extrafilterkey] = [];
        array_push($extrafiltervalue, $value['value']);
        $aExtraFilter2[$extrafilterkey] = implode(',', $extrafiltervalue);
    }
    var_dump($aExtraFilter2);

the output is :

array (size=2)
  'CookTech' => string 'Broil,Pan Fry' (length=13)
  'CookSkills' => string 'Broil,Pan Fry,Intro,Knife Skills' (length=32)

I want it to look like this:

array (size=2)
  'CookTech' => string 'Broil,Pan Fry' (length=13)
  'CookSkills' => string 'Intro,Knife Skills' (length=32)

I think I'm almost there but I guess I need some help.

2 Answers 2

1

This line does nothing because it is superseded just a bit later as the same variable is being set:

$aExtraFilter2[$extrafilterkey] = [];

This line appends to the array regardless of what you have as $value['key'], which is why you get all keys lumped together in the output:

array_push($extrafiltervalue, $value['value']);

This will produce a desired output:

// fill array of arrays
$aExtraFilter2 = [];
foreach ($aExtraFilter as $key => $value) {
    if (!array_key_exists($value['key'], $aExtraFilter2)) $aExtraFilter2[$value['key']] = [];
    $aExtraFilter2[$value['key']][] = $value['value'];
}
// convert to string (if needed at all, depends on what you're doing later)
foreach ($aExtraFilter2 as $key => $set) {
    $aExtraFilter2[$key] = join(',', $set);
}
Sign up to request clarification or add additional context in comments.

Comments

1

The typical way to code this is by creating a temporary structure, based on the key and comprising an array with the values:

$tmp = [];
foreach ($aExtraFilter as $pair) {
    $tmp[$pair['key']][] = $pair['value'];
}

The structure would look like this afterwards:

[
    'CookTech' => ['Broil', 'Pan Fry'],
    'CookSkills' => ['Intro', 'Knife Skills'],
]

Then, you map that array against the representation you want to have:

$aExtraFilter2 = array_map(function($values) {
    return join(',', $values);
}, $tmp);

See also: array_map()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.