我正在重新发布时事通讯。
我有一个包含所有简报字段的表格,如下所示:
field_uid | field_name | field_content | field_letter_id
f.x.列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"];
但我似乎无法弄清楚如何设置字段数组。
答案 0 :(得分:5)
$result = array_combine(array_column($data, 'field_name'), $data);
答案 1 :(得分:4)
最简单的解决方案就是遍历您的数组,例如:
$result = [];
foreach($data as $row)
{
$result[$row['field_name']] = $row['field_content'];
}
您可能希望在获取周期中执行此操作(因此您将避免再次遍历行两次)
答案 2 :(得分:3)
好吧,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
答案 3 :(得分:1)
这是一个古老的问题,但是我认为值得一提的是,[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 )
答案 4 :(得分:0)
使用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"
}
答案 5 :(得分:-1)
Garh ......没关系..
相当简单
$field[$key["field_name"]] = $key["field_content"];