从数组创建数组

时间:2016-12-28 16:22:42

标签: php arrays

我有以下数组。

{#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
);

我会做无数次同样的操作,所以我认为应该有一个合适的解决方案,而不是循环所有的值,并使用if else等检查attribute_name。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以做一个简单的foreach循环并构建结果数组:)

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

这看起来好一点。在大多数情况下,它可能没有太大的不同,但我不认为它只是一个简单的foreach;)

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

答案 2 :(得分:0)

简短而简单:

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