doupin5408 2017-03-10 11:22
浏览 120
已采纳

使用in_array()的2个值的PHP搜索数组列

How do I search for 2 values in the same record using in_array()? For example I want to search for 'AuthorNiceName' value and 'AuthorType' value.

The below code does not work how I would like. It should return "EU TEST" but it returns "CP TEST".

Thanks in advance.

 $authors = array(
        array(
            'AuthorName' => 'John Smith',
            'AuthorNiceName' => 'john-smith',
            'AuthorType' => 'CP'
        ),
        array(
            'AuthorName' => 'Joe Bloggs',
            'AuthorNiceName' => 'joe-bloggs',
            'AuthorType' => 'EU'
        ),
    );



    if (in_array('joe-bloggs', array_column($authors, 'AuthorNiceName')) && in_array('EU', array_column($authors, 'AuthorType'))) {
        $authorType = 'CP TEST';
    }
    else {
        $authorType = 'EU TEST';
    }

    echo $authorType;

UPDATE: My latest code using @Philipp's suggestion which I adjusted slightly. However it doesn't work, if there are other users with the same 'AuthorType' it returns "no match"?

$authors = array( //TODO
    array(
        'AuthorName' => 'John Smith',
        'AuthorNiceName' => 'john-smith',
        'AuthorType' => 'CP'
    ),
    array(
        'AuthorName' => 'Joe Bloggs',
        'AuthorNiceName' => 'joe-bloggs',
        'AuthorType' => 'EU'
    ),
    array(
        'AuthorName' => 'Matt Bat',
        'AuthorNiceName' => 'matt-bat',
        'AuthorType' => 'EU'
    ),    
);

$name = 'joe-bloggs';
$type = 'EU';
foreach ($authors as $author) {
    if ($author['AuthorNiceName'] == $name && $author['AuthorType'] == 'EU') {
        $authorType = 'EU Test';
    }
   elseif ($author['AuthorNiceName'] == $name && $author['AuthorType'] == 'CP') {
        $authorType = 'CP Test';
    }
    else {
        $authorType = 'no match';
    }

}

echo $authorType; //returns "not match". it should return "EU Test".
  • 写回答

1条回答 默认 最新

  • douyuan4357 2017-03-10 11:32
    关注

    It seems, you should use a loop for what you want

    $name = 'joe-bloggs';
    $type = 'EU';
    foreach ($authors as $author) {
        if ($author['AuthorNiceName'] == $name && $author['AuthorType'] == $type) {
            // do something
        }
    }
    

    using in_array with array_column looses the information if the result is from the same column. Using array_search, you could also compare the index of the columns, but this seems like a bad solution...


    Update

    The problem with your update is, you overwrite the $authorType var, after you set the correct value. You should check, if an value is already set and only then set a new value.

    $name = 'joe-bloggs';
    $authorType = false;
    foreach ($authors as $author) {
        if ($author['AuthorNiceName'] == $name && $author['AuthorType'] == 'EU') {
            $authorType = 'EU Test';
        } elseif ($author['AuthorNiceName'] == $name && $author['AuthorType'] == 'CP') {
            $authorType = 'CP Test';
        }
    }
    
    if ($authorType === false) {
        echo 'no match';
    } else {
        echo $authorType;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么