不使用echo的数组

时间:2016-01-27 14:29:06

标签: php

我在生成数组$meta的WordPress模板中有以下代码:

<?php

global $wpdb;
$query = ("SELECT ID, post_password, post_name
    FROM $wpdb->posts
    WHERE post_password = 'listing'");

$listings = $wpdb->get_results( $query, OBJECT);

foreach($listings as $listing) {
    $meta = get_post_meta($listing->ID,'' ,true);
    $meta = array_map(function($n) {return $n[0];}, $meta);
    echo "<br /> listing->ID = $listing->ID"; 
    echo "<pre>";
    print_r($meta);
    echo "</pre>"; 
    $first_name = $meta['first_name'];
    $last_name = $meta['last_name'];
?>
<tr>
    <td>
        <?php echo $meta['first_name']; ?>
    </td>

上面的print_r($ meta)打印出来

Array
(
    [first_name] => John
    [last_name] => Jones
    [business_name] => 
    [phone] => 208 324-6916
    [email] => johnjones@yahoo.com
    [page_name] => 
    [barcode_number] => 
    [website] => 
    [header] => 
    [description_1] => 
    [description_2] => 
    [footer] => 
)

我想将这些值回显到表格单元格中。如果我写

    <td>
        <?php echo $meta['first_name']; ?>
    </td>

我收到错误:Notice: Undefined index: first_name in . . .

但如果我这样做

$first_name = $meta['first_name'];
?>
    <td>
        <?php echo $first_name; ?>
    </td>

有效。有谁知道发生了什么?感谢。

2 个答案:

答案 0 :(得分:2)

您可能会在分配和输出之间的某处意外覆盖$ meta变量。打印完整数组

<td>
    <?php var_dump($meta); ?>
</td>

并将其与您定义的那个进行比较。您可能会感到惊讶的是,它不是您之前设置的,甚至不再是阵列。这可以通过extract()等函数隐式发生。

答案 1 :(得分:0)

让我们重现您的阵列,经过全面测试(PHP 5.2,5.3,5.4,5.5):

$meta = [
    'first_name' => 'John',
    'last_name' => 'Jones',
    'business_name' => '',
    'phone' => '208 324-6916',
    'email' => 'johnjones@yahoo.com',
    'page_name' => '',
    'barcode_number' => '', 
    'website' => '',
    'header' => '',
    'description_1' => '',
    'description_2' => '',
    'footer' => ''
];

echo $meta['first_name']; // John

所以我认为你不能将你的数组分配给$ meta。复制上面并测试。

是旧服务器上的旧代码吗?

好的,我从不说这个,但可能,你在一台很旧的服务器上维护了很旧的代码。通过这种方式,我可以将错误级别设置得更低。

error_reporting(E_ALL ^ E_NOTICE);