Tengo siguiente matriz.

{#11950
  +"attributes": array:3 [
    0 => {#608
      +"attribute_value": "test123"
      +"attribute_name": "name"
    }
    1 => {#556
      +"attribute_value": "foo moo"
      +"attribute_name": "lastname"
    }
    2 => {#605
      +"attribute_value": "sample moo"
      +"attribute_name": "email"
    }
    3 => {#606
      +"attribute_value": "holo"
      +"attribute_name": "adress"
    }
  ]
}

Me gustaría convertirlo como sigue

$a = array(
    'name' => 'test123',
    'lastname' => 'foo moo',
    'email' => 'sample moo',
    'address' => 'holo
);

Haré la misma operación innumerables veces, así que creo que debería haber una solución adecuada en lugar de hacer un bucle de todos los valores y verificar el atributo_nombre con if else, etc.

-2
Mehmet Ince 28 dic. 2016 a las 19:22

3 respuestas

La mejor respuesta

Puede hacer esto con una sola llamada a array_column, utilizando el parámetro $index_key:

$arr = [
  ['attribute_name' => 'foo', 'attribute_value' => 123],
  ['attribute_name' => 'bar', 'attribute_value' => 456],
  ['attribute_name' => 'baz', 'attribute_value' => 789],
];

$result = array_column($arr, 'attribute_value', 'attribute_name');

Consulte https://eval.in/705641

3
iainn 28 dic. 2016 a las 16:44

Podría hacer un bucle foreach simple y construir la matriz de resultados :)

$result = [];
foreach ($array as $attr) {
    $result[$attr['attribute_name']] = $attr['attribute_value'];
}

Esto se lee un poco mejor. Probablemente no sea muy diferente en la mayoría de los casos, pero no creo que sea tan eficaz como un simple foreach;)

$result = array_combine(
    array_column($array, 'attribute_name'),
    array_column($array, 'attribute_value')
);
0
martindilling 28 dic. 2016 a las 16:34

Corto pero simple:

$result = array_combine(array_column($arr, 'attribute_name'), array_column($arr, 'attribute_value'));
0
Fyntasia 28 dic. 2016 a las 16:29