无法用foreach检查字符串

时间:2016-09-27 18:29:45

标签: php

我有这个php数组

$Topic=[
    '50 Cent' => '50cent.jpg Rap',
    'Adam Levine' => 'adam.jpg Rock',
    'Android' => 'android.jpg Operating System',
];

和这个foreach代码

    <?php foreach ($Topic as $key => $value):
    $type=substr($value,strpos($value,' ')); 
    $value=explode(' ',$value);?>
        <?php if (strcmp($type,'Rap')==0): ?>
            <div class="topic_d">
                <img src="topics/<?php echo $value[0]?>" class="topic_img"> 
            </div>      
        <?php endif ?>
    <?php endforeach ?>

我的目标是打印阵列中所有类型为'Rap'的主题。但我不能这样做,即使我打印type它返回Rap /

2 个答案:

答案 0 :(得分:0)

添加修剪以比较类型与&#39; Rap&#39;

if (strcmp(trim($type),'Rap')==0)

$type=trim(substr($value,strpos($value,' '))); 

因为类型不是&#39; Rap&#39;但是&#39;说唱&#39;

答案 1 :(得分:0)

您也可以选择正则表达式:

<?php
    $Topic=[
        '50 Cent'       => '50cent.jpg Rap',
        'Adam Levine'   => 'adam.jpg Rock',
        'Android'       => 'android.jpg Operating System',
    ];

    $regex_topic = '/^[a-z0-9.]+\s([a-z\s]+)$/gi';
?>

<?php foreach( $Topic as $topic_key => $topic_value ): ?>
    <?php
        $match = '';
        preg_match($regex_topic, $topic_value, $topic);
    ?>

    <?php if( isset($match[1]) && $match[1] == 'Rap' ): ?>
        <div class="topic_d">
            <img src="topics/<?php echo $value[0]?>" class="topic_img"> 
        </div>
    <?php endif ?>
<?php endforeach ?>

正则表达式可以像:

  1. [a-z0-9.]+\s是你的.jpg部分,所以我们抓住了一堆字符后跟一个空格
  2. [a-z\s]+是您的主题,是字符和空格的组合
  3. 用括号([a-z\s]+)对它们进行分组可以让它们抓住它们
  4. 要捕获一个组,您需要在preg_match($regex, $string, $match)中通过引用传递一个额外的变量,其中$match[0]包含根据正则表达式的已导入的捕获字符串,$match[1], $match[2], ... $match[n]是您的组{{3 }}