代码之家  ›  专栏  ›  技术社区  ›  Jeff

如何通过比较两个PHP数组来搜索和替换

  •  0
  • Jeff  · 技术社区  · 16 年前

    我把所有的开始标签都放在这个字符串里 (array) $opened 和所有的结束标记进入 (array) $closed ,例如:

    '<div>
        Test
     </div>
    
     <div>
        <blockquote>
           <p>The quick</p>
           <blockquote>
              <p>brown fox <span>jumps <span>over <img src="#" /> the'
    

    这两个数组中的结果:

    $opened =

    array(8) {
      [0]=> string(3)  "div"         // Need removed
      [1]=> string(3)  "div"
      [2]=> string(10) "blockquote"
      [3]=> string(1)  "p"           // Need removed
      [4]=> string(10) "blockquote"
      [5]=> string(1)  "p"
      [6]=> string(4)  "span"
      [7]=> string(4)  "span"
    }
    

    $closed =

    array(2) {
      [0]=> string(3) "div"
      [1]=> string(1) "p"
    }
    

    查找第一次出现的 $closed[0] (这是 "div" )在 $opened 数组并将其从 数组,然后重复,直到所有 $closed 标签( "div "p" )已从顶部移除 美元打开 .

    3 回复  |  直到 16 年前
        1
  •  1
  •   Jeff    16 年前

    希望这对别人有帮助。这就是我想到的:

    <?php
    
        for ( $i = 0; $i < $num_closed; $i++ )
        {
            unset ( $opened[ array_search( $closed[ $i ], $opened ) ] );
        }
    
    ?>
    

    我还提出了一个解决方案 for 循环,但你必须操纵 $opened[$i] $closed[$n] 独立的,而且代码多一点,所以我最终决定使用这个。

        2
  •  0
  •   lyscer    16 年前

    我不确定这是否是你正在寻找的,但这将删除你正在寻找的东西的第一个实例。

    <?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    
    $opened_tags = array("div", "div", "blockquote", "p", "blockquote", "p", "span", "span");
    $closed_tags = array("div", "p");
    
    $find = "div";
    
    $size = sizeof($closed_tags);
    for($i=0; $i<$size; $i++) {
        if($closed_tags[$i] == $find){
            unset($closed_tags[$i]);
            break;
        }
    }
    
    echo "closed_tags with empty spaces: ".print_r($closed_tags, true)."<br /><br />";
    
    $closed_tags = array_values($closed_tags);
    echo "closed_tags array indexed correctly: ".print_r($closed_tags, true)."<br />";
    ?>
    
        3
  •  0
  •   Cups    16 年前
    推荐文章