【问题标题】:in_array function not workingin_array 函数不起作用
【发布时间】:2013-10-14 17:51:33
【问题描述】:

我有一个 XML 文件,我将它读入 PHP 数组,以便使用 CakePHP 的 XML::toArray($xmlString) 函数进行处理。

一切正常,我可以轻松地处理数据,但是,当我尝试运行 in_array 检查时,它一直返回 false,即使我知道值在那里。

这是 if 语句:

$xmlArray = Xml::toArray($xmlString);
$menus = $xmlArray['navigation'];
$groupId = array($groupId); // Group ID of logged in user, in my case 1
$loggedInId = array($loggedInId); // User ID, in my case 182
//I change them both into arrays, as the second param needs to be an array, and in the XML file, there could only be one value, in which case it's "translated" as a string
//$submenu == foreach($menu['submenu']['menu'] as $subenu)
if(in_array($submenu['permission']['group'],$groupId) || in_array($submenu['permission']['user'],$loggedInId)) {
    //do stuff
}

这是 XML 文件(导航位):

<?xml version="1.0" encoding="utf-8"?>
<navigation>
    <menu>
        <title>Home</title>
        <url>home</url>
        <submenus>
            <menu>
                <title>In memory of...</title>
                <url>memoriams</url>
                <image>memoriam</image>
                <permission>
                    <group>1</group>
                    <user>0</user>
                </permission>
            </menu>
            <menu>
                <title>Reports</title>
                <url>reports</url>
                <image>report</image>
                <permission>
                    <group>4</group>
                    <group>5</group>
                    <user>252</user>
                    <user>182</user>
                    <user>234</user>
                </permission>
            </menu>
        </submenus>
    </menu>
</navigation>

菜单仅在第一种情况下显示。也就是说,如果组/用户只有 1 个值。如果它有多个值,它只是不显示子菜单。

这里是数组的调试:

array(
    'menu' => array(
        'title' => 'Home',
        'url' => 'home',
        'submenus' => array(
            'menu' => array(
                (int) 0 => array(
                    'title' => 'In memory of...',
                    'url' => 'memoriams',
                    'image' => 'memoriam',
                    'permission' => array(
                        'group' => '1',
                        'user' => '0'
                    )
                ),
                (int) 1 => array(
                    'title' => 'Reports',
                    'url' => 'reports',
                    'image' => 'report',
                    'permission' => array(
                        'group' => array(
                            (int) 0 => '4',
                            (int) 1 => '5'
                        ),
                        'user' => array(
                            (int) 0 => '252',
                            (int) 1 => '182',
                            (int) 2 => '234'
                        )
                    )
                )
            )
        )
    )
)

有人知道为什么它不想工作吗?

【问题讨论】:

标签: php xml arrays cakephp


【解决方案1】:

函数in_array的第一个参数是needle,第二个参数是array来搜索匹配!!

参考:PHP Manual

【讨论】:

    【解决方案2】:
    foreach ($menu['menu']['submenus']['menu'] as $submenu) {
      $group = $submenu['permission']['group'];
      $user = $submenu['permission']['user'];
      if(in_array($group, (array) $groupId) || in_array($user, (array) $loggedInId)) {
        //do stuff
      }
    }
    

    【讨论】:

    • 为什么是(array)?它不是必需的,并且可能由于 confertions 导致非常奇怪的结果。如果要确保它是一个数组,请检查一个数组。 IMO 正确的编码不需要那个,只要确保所有用户输入都得到正确的处理:)
    • 我知道它可能看起来“笨重”,但 IMO 正确的编码确实需要它。什么都没有丢失,因为in_array() 的第二个参数总是需要是一个数组,所以将(array) 放在变量前面可以确保如果一个非数组意外传递给它,它将被转换放入数组中,从而防止错误日志中出现不必要的错误、不必要的断码等。如果传递给它的变量已经是一个数组,它将不理会。它除了帮助什么都不做。但我同意应该正确处理用户输入。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多