3

我正在重写一份时事通讯。

我有一个包含所有时事通讯字段的表格,如下所示:

field_uid | field_name | field_content | field_letter_id 

其中 fx 列field_name可以有值letter_headline ,列field_content可以有值My headline

当我这样做时:

$fields = $this->db->dbh->query("SELECT field_name, field_content FROM newsletter_fields WHERE field_letter_uid = '". $letter_id ."'"); 

foreach($fields->fetchAll(PDO::FETCH_ASSOC) as $key) {
   print_r($key);
}

它会正确地给我这个:

Array ( [field_name] => letter_image0 [field_content] => image.jpg ) 
Array ( [field_name] => letter_headline [field_content] => My headline ) 
Array ( [field_name] => letter_headline_size [field_content] => 12 ) 
Array ( [field_name] => letter_sub_headline [field_content] => My subheadline ) 
Array ( [field_name] => letter_sub_headline_size [field_content] => 10 ) 
Array ( [field_name] => letter_content [field_content] => Letter content ) 
Array ( [field_name] => letter_link [field_content] => www.example.com )
Array ( [field_name] => letter_link_txt [field_content] => Example )

我想要的是建立一个这样的数组

$field["letter_image"] = "image.jpg";
$field["letter_headline"] = "My headline"

然后我可以输出内容:

echo $field["letter_image"];

但我似乎无法弄清楚如何设置字段数组。

4

6 回答 6

16
$result = array_combine(array_column($data, 'field_name'), $data);
于 2018-03-07T08:06:03.573 回答
5

最简单的解决方案就是遍历您的数组,例如:

$result = [];
foreach($data as $row)
{
   $result[$row['field_name']] = $row['field_content'];
}

您可能希望在 fetch 周期中执行此操作(因此您将避免然后迭代行两次)

于 2013-10-11T09:24:09.817 回答
4

这是一个老问题,但我认为值得一提的是,[array_column][1]函数可以接受列的名称作为数组键作为第三个参数,所以最简单的解决方案是:

// field_content column will be used as values of the array
// field_name column will be used as keys
$result = array_column($data, 'field_content', 'field_name');

将此应用于@Toskan 的答案示例:

$x = [['id' => 5, 'name' => 'john'], ['id' => 15, 'name' => 'jim']];
$result = array_column($x, 'name', 'id');

print_r($result);
// outputs Array ( [5] => john [15] => jim )
于 2018-08-03T11:29:22.497 回答
4

好吧,almas 解决方案没有使用经过优化的本机实现。

我不是说它是错的,只是没有优化。

这应该优化:

  $x = [['id' => 5, 'name' => 'john'], ['id' => 15, 'name' => 'jim']];

  $keys = array_column($x, 'id');
  $values = array_column($x, 'name');
  $result = array_combine($keys, $values);

  var_dump($result);

//outputs array(2) { [5]=> string(4) "john" [15]=> string(3) "jim" }

这不适用于 PHP 4,仅适用于 php > 5.5

于 2017-05-18T13:28:46.403 回答
1

使用array_column的第三个参数

$rows = [
    [
        'field_name' => 'letter_image',
        'field_content' => 'image.jpg'
    ],
    [
        'field_name' => 'letter_headline',
        'field_content' => 'My headline'
    ],
];

$fields = array_column($rows, 'field_content', 'field_name');

---

php > var_dump($fields);
array(2) {
  ["letter_image"]=>  string(9) "image.jpg"
  ["letter_headline"]=>  string(11) "My headline"
}

https://www.php.net/manual/es/function.array-column.php

于 2021-02-05T13:07:37.223 回答
-1

Garh...没关系..

相当简单

$field[$key["field_name"]] = $key["field_content"];
于 2013-10-11T09:24:00.473 回答