【问题标题】:checking to see if a vaule is in a particular key of an array检查值是否在数组的特定键中
【发布时间】:2011-05-29 16:49:11
【问题描述】:

我是使用数组的新手,所以我需要一些帮助。从数组中只获取一个值。我有一个看起来像这样的原始数组:

 $array1= Array(   
     [0] => 1_31   
     [1] => 1_65  
     [2] => 29_885...)

我要做的是搜索并仅返回下划线后的值。我已经弄清楚如何将该数据放入第二个数组并将值作为新数组返回。

    foreach($array1 as $key => $value){
    $id = explode('_',$value);
}

这给了我:

Array ( [0] => 1  [1] => 31 ) 
Array ( [0] => 1  [1] => 65 ) 
Array ( [0] => 29 [1] => 885 )

我还可以使用$id[1] 获取下划线后的id 或部分列表我只是不确定这是否是最好的方法以及是否是如何进行搜索。我试过使用in_array(),但它会搜索整个数组,我不能让它只搜索数组的一个键。

任何帮助都会很棒。

【问题讨论】:

    标签: php arrays multidimensional-array foreach explode


    【解决方案1】:

    我会说你做得和其他人一样好。

    编辑

    替代方法:

    $array1 = array_map(create_function('$a','$_ = explode("_",$a); return $_[1];'),$array1);
    echo in_array(3,$array1) ? "yes" : "no"; // 3 being the example
    

    【讨论】:

    • 谢谢,我会把它作为补充。我快到了,只是有点卡住了。
    • @BandonRandon:不用担心,我们都是从某个地方开始的。我会努力(如果可能的话)不以这种方式存储值。不过,如果这不是你做的,那么解析它就差不多了。
    • 数据来自使用 JSON 的 api。它们是公交线路号,下划线之前的部分是机构,之后的部分是路线号。
    【解决方案2】:

    我不得不同意。如果您希望查看数组中是否存在值,但只需使用 'array_key_exists' 函数,如果它返回 true,则使用该值。

    【讨论】:

    • 我试过了,但还是不行。当然我可能做错了。我试过if(array_key_exists('1', $value))
    【解决方案3】:

    如果下划线后面的部分是唯一的,则将其作为新数组的键:

    $newArray = array();
    foreach($array1 as $key => $value){
        list($v,$k) = explode('_',$value);
        $newArray[$k] = $v;
    }
    

    因此您可以使用isset($newArray[$mykey]) 检查密钥是否存在,这样效率会更高。

    【讨论】:

    • 是的,下划线后面的部分对于它所在的数组来说是唯一的。
    • +1 用于跳出框框思考。不确定“初始开销”是否值得,或者它只会被迭代一次。
    【解决方案4】:

    您可以使用preg_grep() grep 数组:

    $array1= array("1_31", "1_65", "29_885");
    $num = 65;
    print_r(preg_grep("/^\d+_$num$/", $array1));
    

    输出:

    Array
    (
        [1] => 1_65
    )
    

    http://ideone.com/3Fgr8

    【讨论】:

    • 我必须去掉下划线之前的部分并检查它。问题是如果$num = 1 那么它将返回 1_31 和 1_65。我真正想要$num = 1 的地方是 1_1。
    • 矫枉过正,虽然仍然是一个可行的选择。 (为什么每个人都这么快地使用正则表达式来解决每个“在字符串中查找值”的问题?)
    • @Bandon 不,它会返回1_1(参见ideone.com/3ykhB)。它当前检查下划线右侧的值。你想让它检查左,右,两者吗?
    • @Brad 因为他要求一种“更好”的方式,而我给出了一个简短的选择? :P
    • @Brad 这个问题的神? ;-)
    猜你喜欢
    • 2018-06-15
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2011-10-22
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多