获取列内容作为数组键

Mor*_*agh 1 php mysql arrays foreach

我正在写简讯。

我有一个所有新闻通讯字段的表格,就像这样:

field_uid | field_name | field_content | field_letter_id 
Run Code Online (Sandbox Code Playgroud)

在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);
}
Run Code Online (Sandbox Code Playgroud)

它将正确地给我这个:

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 )
Run Code Online (Sandbox Code Playgroud)

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

$field["letter_image"] = "image.jpg";
$field["letter_headline"] = "My headline"
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用以下命令输出内容:

echo $field["letter_image"];
Run Code Online (Sandbox Code Playgroud)

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

dig*_*ack 9

$result = array_combine(array_column($data, 'field_name'), $data);
Run Code Online (Sandbox Code Playgroud)

  • 尽管您的代码段可能会解决问题,但是您应该描述代码的目的(它如何解决问题)。此外,您可能想查看https://stackoverflow.com/help/how-to-answer (3认同)
  • @AhmadF 阅读代码,不难理解。`array_combine` 接受两个数组并将它们组合起来,使用第一个数组作为键,使用第二个数组作为值。`array_column` 从数组中提取一列。这是一个很好的解决方案! (2认同)

小智 7

这是一个老问题,但我认为值得一提的是,[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');
Run Code Online (Sandbox Code Playgroud)

将此应用于@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 )
Run Code Online (Sandbox Code Playgroud)


Alm*_* Do 5

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

$result = [];
foreach($data as $row)
{
   $result[$row['field_name']] = $row['field_content'];
}
Run Code Online (Sandbox Code Playgroud)

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