【问题标题】:Warnings in php codephp代码中的警告
【发布时间】:2012-11-25 17:34:57
【问题描述】:

警告:array_keys() 期望参数 1 是数组,字符串在 /home/hennacur/public_html/shop/wp-content/themes/montezuma/includes/image_meta.php 第 34 行

警告:为 foreach() 提供的参数无效 /home/hennacur/public_html/shop/wp-content/themes/montezuma/includes/image_meta.php 第 40 行

                                                 function bfa_image_size() {
$meta = wp_get_attachment_metadata();
echo $meta['width']. '×' . $meta['height'];
    }


    function bfa_image_meta( $args = '' ) {

$defaults = array(
    'keys' => '',
    'before' => '', 
    'after' => '',
    'item_before' => '', 
    'item_after' => '',
    'item_sep' => ' · ',
    'key_before' => '',
    'key_after' => ': ',
    'value_before' => '',
    'value_after' => '',
    'display_empty' => FALSE    
);

$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );

$meta = wp_get_attachment_metadata();

$string_array = array();

       // All keys, alphabetically sorted, as provided by wp_get_attachment_metadata()
if( $keys == '' ) {
    $array_keys = array_keys( $meta['image_meta'] );  ---***line34***       
// Only keys specificed in parameter:
} else {
    $array_keys = array_map( 'trim', explode( ',', $keys ) );
}

foreach( $array_keys as $key ) { --***line 40***

    $value = $meta['image_meta'][$key];

    if( $display_empty === TRUE || ( $value != '' && $value != '0' ) ) {

        if( $key == 'created_timestamp' )
            // Transform timestamp into readable date, based on default WP date/time settings:
            $value = date( get_option('date_format') . ' - ' . get_option('time_format'), $value );

        // Prettify key
        $key = ucwords( str_replace( '_', ' ', $key ) );
        $key = $key == 'Iso' ? 'ISO' : $key;


        $key = str_replace( 
            array(
                'Aperture',
                'Credit',
                'Camera',
                'Caption',
                'Created Timestamp',
                'Copyright',
                'Focal Length',
                'ISO',
                'Shutter Speed',
                'Title'
            ),
            array(
                __( 'Aperture', 'montezuma' ),
                __( 'Credit', 'montezuma' ),
                __( 'Camera', 'montezuma' ),
                __( 'Caption', 'montezuma' ),
                __( 'Timestamp', 'montezuma' ),
                __( 'Copyright', 'montezuma' ),
                __( 'Focal Length', 'montezuma' ),
                __( 'ISO', 'montezuma' ),
                __( 'Shutter Speed', 'montezuma' ),
                __( 'Title', 'montezuma' )
            ),      
            $key
        );

我有上面的代码。出现警告的原因可能是什么?

【问题讨论】:

  • 拒绝将变量命名为保留字——这只是一个好习惯,可以让您在未来远离错误。并添加var_dump($meta['image_meta']); 以查看$meta['image_meta'] 的真正含义和包含的内容

标签: php wordpress wordpress-theming


【解决方案1】:

试试这个(你可以看到这个警告,因为 $array_keys 的类型为字符串或其他)如果 stetmen:

 if(is_array($array_keys) && !empty($array_keys)) { // foreach stetment here }

【讨论】:

    【解决方案2】:

    警告说明了一切。

    array_keys() expects parameter 1 to be array, string given 告诉你一个字符串被传递给array_keys() 而不是一个数组。

    因此,$meta['image_meta'] 可能不是一个数组。

    因此,$array_keys 没有被设置为数组,当您尝试对其应用 foreach 时,会导致下一个警告。

    【讨论】:

    • 函数 bfa_image_size() { $meta = wp_get_attachment_metadata();回声 $meta['width']. '×' . $meta['身高']; } function bfa_image_meta( $args = '' ) { $defaults = array( 'keys' => '', 'before' => '', 'after' => '', 'item_before' => '', 'item_after '=> '', 'item_sep' => '·', 'key_before' => '', 'key_after' => ':', 'value_before' => '', 'value_after' => '', ' display_empty' => FALSE ); $r = wp_parse_args($args, $defaults);提取($r,EXTR_SKIP); $meta = wp_get_attachment_metadata(); $string_array = array();
    • @karu:请不要将代码放在评论中。它变得难以理解。还有……你想在这条评论中说什么?
    • 其实是定义为一个数组
    • 如果按照 WebnetMobile.com 的建议,将 var_dump($meta['image_meta']); 添加到代码中,您可能会发现并非如此。 PHP 警告你它不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2023-03-29
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多