搜索数组返回标准所在的维度

时间:2011-02-28 13:17:46

标签: php arrays search

为了搜索包含大量信息的数组,我尝试从PHP.net的手册中实现一些想法,但是,我失败了。

我的目标是在数组中搜索给定值,如果找到该值,我需要获取与其相关的所有信息。请参阅数组示例和PHP代码。

因此对于RoomCode 117 =数组中的PropertyId 而且我想抓住所有的财产

PHP:

    $RoomCode = 117
    echo in_array($RoomCode, $_SESSION['PROPERTY_ARR']);

ARRAY:

Array
(
    [Property One] => Array
        (
            [Property] => Bolt Hole
            [PropertyId] => 117
            [LocationId] => 9

    )
    [Property Two] => Array
        (
            [Property] => Ledge
            [PropertyId] => 1197
            [LocationId] => 10
    )

我的数组包含每个“属性”的更多信息。再过一些信息,请问。

谢谢C

3 个答案:

答案 0 :(得分:2)

$RoomCode = 117;                                                                                                                                                           
$foundProperties = array_filter($_SESSION['PROPERTY_ARR'], create_function('$r', 'return $r["PropertyId"] == '.$RoomCode.';'));                                                                

答案 1 :(得分:1)

如果您已经在注释中测试了解决方案,那么在PHP文档中搜索array_search(http://php.net/manual/en/function.array-search.php)和in_array(http://)中的多维数组php.net/manual/en/function.in-array.php),也许你应该考虑为你的阵列更好的格式化。 告诉我,如果我错了,但看起来PropertyId是每个属性的唯一标识符。如果此数组由属性id索引,则搜索数组ID会更容易,更快捷。 如果我修改你的样本数组,你会有这样的东西:

Array
(
    [117] => Array
        (
            [Property] => Bolt Hole
            [LocationId] => 9

    )
    [1197] => Array
        (
            [Property] => Ledge
            [LocationId] => 10
    )
)

然后,你不需要搜索它,如果你想要属性117,你只需使用:

$_SESSION['PROPERTY_ARR'][117]

答案 2 :(得分:0)

我尝试了最好最简单的解决方案,请看看

$arr_prop =array
(
    'Property One' => array
    (
            'Property' => 'Bolt Hole',
            'PropertyId' => 117,
            'LocationId' => 9

    ),
    'Property Two' => array
        (
            'Property' => 'Ledge',
            'PropertyId' => 1197,
            'LocationId' => 10
    )
);
//echo "<pre>";
//print_r($arr_prop);
$r =117;
$output=array();
foreach($arr_prop as $key=>$value) 
{
    //echo "<pre>";
    //var_dump($value);
    if(is_array($value)) 
    {
        //echo __LINE__;
        if(in_array($r,$value))
            $output = $value;
    }
}
echo "<pre>";
print_r($output);