2016-12-28 7 views
-2

У меня есть следующий массив.Создание массива из массива

{#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" 
    } 
    ] 
} 

Я хотел бы, чтобы преобразовать его, как следовать

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

Я буду делать то же операцию бесчисленное количество раз, так что я считаю, что должно быть правильное решение, а затем цикл все значения и проверить ATTRIBUTE_NAME с, если еще и т.д.

+1

'array_column()' было бы достаточно. – mario

+0

Вам нужно будет перебрать все элементы, чтобы преобразовать их все. Будь то цикл, который вы пишете, или используйте array_map https://secure.php.net/manual/en/function.array-map.php, вам все равно нужно коснуться каждого элемента. Решение должно быть не менее O (n) – easement

+0

Я не понимаю вашу запись массива. Что такое '# 11950', а что означает' + 'перед именами свойств? – Barmar

ответ

3

Вы можете сделать это с одним вызовом array_column, используя $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'); 

См https://eval.in/705641

0

Вы могли бы сделать простой цикл Еогеасп и построить результирующий массив :)

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

Это немного лучше. Это, вероятно, не делает сильно отличается в большинстве случаев, но я не думаю, что это так производительным, как только простой Еогеасп;)

$result = array_combine(
    array_column($array, 'attribute_name'), 
    array_column($array, 'attribute_value') 
); 
+0

О, @Fyntasia избили меня в альтернативную версию ^^ – martindilling

0

Короткий, но простой:

$result = array_combine(array_column($arr, 'attribute_name'), array_column($arr, 'attribute_value')); 
Смежные вопросы