In_array()表示数组是布尔型?

时间:2019-10-01 作者:Wade Koehn

我在使用in\\u array()时遇到了一个错误。

在下面的代码中,我将$active\\u modules作为metabox的返回。从选项页获取值的io函数。此返回值是一个数组,但in\\u array()一直抱怨它不是。

警告:in\\u array()要求参数2为数组,bool给定

我已经在同一个文件中,在这个函数的正下方添加了第二个函数,它使用相同的数组值,将此函数转储到管理通知中进行测试。我不明白为什么第一个代码不能正常工作?任何指向正确方向的指针都将不胜感激!

<?php

if ( ! defined( \'WPINC\' ) ) {
    die;
}

// Array of modules in plugin to be used for autoloader and settings page.
$all_modules = array(
    array(
        \'id\'    => \'products\',
        \'title\' => \'Products\',
        \'path\'  => \'kdc-products/kdc-products.php\',
    ),
    array(
        \'id\'    => \'services\',
        \'title\' => \'Services\',
        \'path\'  => \'kdc-services/kdc-services.php\',
    ),
    array(
        \'id\'    => \'locations\',
        \'title\' => \'Locations\',
        \'path\'  => \'kdc-locations/kdc-locations.php\',
    ),
);

// This gives an error: Warning: in_array() expects parameter 2 to be array, bool given...
$active_modules = rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' );

foreach ( $all_modules as $module ) {
    if ( in_array( \'products\', $active_modules, true ) ) {
        require plugin_dir_path( __FILE__ ) . $module[\'path\'];
    }
}

/**
 * This function works fine with the same array values as above.
 *
 * @return void
 */
function sample_admin_notice__success() {
    $all_modules    = array(
        array(
            \'id\'    => \'products\',
            \'title\' => \'Products\',
            \'path\'  => \'kdc-products/kdc-products.php\',
        ),
        array(
            \'id\'    => \'services\',
            \'title\' => \'Services\',
            \'path\'  => \'kdc-services/kdc-services.php\',
        ),
        array(
            \'id\'    => \'locations\',
            \'title\' => \'Locations\',
            \'path\'  => \'kdc-locations/kdc-locations.php\',
        ),
    );
    $active_modules = rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' );
    foreach ( $all_modules as $module ) {
        if ( in_array( \'products\', $active_modules, true ) ) {
            $my_array[] = $module[\'id\'];
        }
    }
    ?>
    <div class="notice">
        <p>
            <?php
                print_r( $my_array );
            ?>
        </p>
    </div>
    <?php
}
add_action( \'admin_notices\', \'sample_admin_notice__success\' );

1 个回复
最合适的回答,由SO网友:Mike Baxter 整理而成

欢迎使用WPSE。我想我看到了你的问题,但无法获得rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' ), 我不能肯定。

您的问题似乎是在$all\\u模块之间循环,但使用in_array() 检查$active\\u模块。根据您的循环,以下是我希望阅读的内容:

// Because you are looping through $all_modules for $module, I assume you should use it...
foreach ( $all_modules as $module ) {
    // If I examine $module, this should not throw and error
    if ( in_array( \'products\', $module, true ) ) {
        require plugin_dir_path( __FILE__ ) . $module[\'path\'];
    }
}
查看您当前的代码,我假设您从rwmb_meta(), 然后把它放进你的in_array() 函数导致错误。

否则,我建议你至少检查一下rwmb_meta() 函数,以确保它是一个数组:

if (is_array($active_modules) && !empty($active_modules)){
    // other code here...
}
希望这能解决它!祝你好运