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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历