Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >逐数组的str_replace数组

逐数组的str_replace数组
EN

Stack Overflow用户
提问于 2021-05-30 04:50:38
回答 3查看 160关注 0票数 0

字符串替换两个数组只替换第一次出现的每个数组

代码语言:javascript
运行
AI代码解释
复制
$text = 'The Book has read by Dog and Cat then Book show Apple not Dog';
$array1 =array('1','2','3','4','5','6');
$array2=array('Book','Dog','Cat','Book','Apple','Dog');
echo str_replace($array2, $array1, $text);

产出是

代码语言:javascript
运行
AI代码解释
复制
The 1 has read by 2 and 3 then 1 show 5 not 2

但需要输出

代码语言:javascript
运行
AI代码解释
复制
The 1 has read by 2 and 3 then 4 show 5 not 6

字符串替换数组第4和第6不能被替换,它已经重复了,它必须是第一次出现,只有替换可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-30 05:06:39

不幸的是,str_replace没有一个内置的选项来限制替换的数量。您可以使用preg_replace代替,因为这个函数作为第四参数有发生的限制。

您的代码需要考虑要替换的字符串现在是regex,所以您需要添加一个分隔符(例如,/)。

工作守则如下:

代码语言:javascript
运行
AI代码解释
复制
$text = 'The Book has read by Dog and Cat then Book show Apple not Dog';
$array1 = array('1','2','3','4','5','6');
$array2 = array('/Book/','/Dog/','/Cat/','/Book/','/Apple/','/Dog/');
echo preg_replace($array2, $array1, $text, 1);

输出是

代码语言:javascript
运行
AI代码解释
复制
The 1 has read by 2 and 3 then 4 show 5 not 6
票数 0
EN

Stack Overflow用户

发布于 2021-05-30 05:09:02

str_replace期望第一个参数中的针是唯一的(在某种程度上)。因此,它不会注意Book的第二次出现,因为它一找到Book,就会在array1中搜索它的替换索引并立即返回匹配。

要克服这一问题,您可以:

  • 将实际的句子拆分成记号。
  • array2中使用array_search检查每个令牌的值。
  • 这将返回索引。将令牌值替换为array1中此索引处的值,稍后在array1array2中取消设置此索引。
  • 这样,我们也可以获得新的后续匹配来重复令牌。

片段:

代码语言:javascript
运行
AI代码解释
复制
<?php

$text = 'The Book has read by Dog and Cat then Book show Apple not Dog';
$array1 = array('1','2','3','4','5','6');
$array2 = array('Book','Dog','Cat','Book','Apple','Dog');

$tokens = explode(" ",$text);
foreach($tokens as &$token){
    $idx = array_search($token,$array2);
    if($idx !== false){ // if match is found.
        $token = $array1[ $idx ];
        unset($array2[ $idx ]);
        unset($array1[ $idx ]);
    }
}

echo implode(" ",$tokens);
票数 0
EN

Stack Overflow用户

发布于 2021-05-30 05:30:09

简单方法:

  • 使用explode(delimiter, string)$text转换为数组$output和分隔符作为空格,然后在其上循环。
  • 使用变量$i保持可替换字的跟踪位置。
  • 在前面通过参考&可以改变。
  • 检查是否$word$array2中,如果是这样更改与相应的数字在$array1和增量$i
  • 将单词与implode(glue, pieces)连接起来。
代码语言:javascript
运行
AI代码解释
复制
$text = 'The Book has read by Dog and Cat then Book show Apple not Dog';
$array1 = array('1','2','3','4','5','6');
$array2 = array('Book','Dog','Cat','Book','Apple','Dog');

$output = explode(' ', $text);
$i=0;
foreach ($output as &$word) {
    if(in_array($word, $array2)){
        $word = $array1[$i];
        $i++;
    }
}
代码语言:javascript
运行
AI代码解释
复制
echo implode(' ', $output);

印刷:

代码语言:javascript
运行
AI代码解释
复制
//The 1 has read by 2 and 3 then 4 show 5 not 6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67761343

复制
相关文章
数组 – 稀疏数组
稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组
全栈程序员站长
2022/07/22
1.1K0
数组 – 稀疏数组
【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )
最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;
韩曙亮
2023/03/29
3.5K0
【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )
vue遍历数组中的数组_vue数组转json
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
3.9K0
PHP数组定义写法和数组赋值以及数组的循环
今天分享的是PHP数组定义写法和数组赋值以及数组循环和数组取值的写法,和数组的用法。 PHP数组定义写法 // 空数组 $arr = array(); // 有值数组 $arr = array("",""); PHP数组赋值 $arr[0] = '云+社区'; array('0' => '云+社区'); PHP数组取值 $arr[0]; // 下面数组是名称数组的取值 $arr['arrname']; PHP数组循环取值 $arr = array('数值','数值','数值'); // for循环取值
小唐同学.
2022/03/07
4.4K0
【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )
最后 , 声明一个 数组指针类型 变量 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;
韩曙亮
2023/03/29
3.1K0
【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )
linux awk 数组,shell数组和awk数组
一、bash支持一维数组(不支持多维数组),没有限定数组的大小。在shell中,用括号来表示数组,数组元素用空格符号分割开。类似于C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
全栈程序员站长
2022/09/09
11.3K0
数组中最大和的子数组
输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。
阳光岛主
2019/02/19
8350
指针数组——元素为指针的数组
叶茂林
2023/07/28
1850
javascript 数组求和_javascript数组的定义
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
2.2K0
PHP 数组:索引数组与关联数组
在静态语言(C、Java、Go)中,数组的定义通常是同一类型数据的连续序列,PHP 的数组从功能角度来说更加强大,可以包含任何数据类型,支持无限扩容,并且将传统数组和字典类型合二为一,在 PHP 中,传统的数组对应的是索引数组,字典类型对应的是关联数组,这得益于 PHP 底层通过哈希表实现数组功能。下面,我们就来简单介绍下 PHP 索引数组和关联数组的基本使用。
学院君
2020/05/27
6K0
javascript定义数组,将数组中数组内容求和_数组求和JAVA
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
3.1K0
【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )
数组首元素地址 : 数组名 , 就是 数组元素首地址 , 该值 是一个常量 , 不能被修改 , 一定程度上 等同于 常量指针 ;
韩曙亮
2023/03/29
9.6K0
【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )
【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
最后 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;
韩曙亮
2023/03/29
3.4K0
【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
【C 语言】数组 ( 数组类型表达 | 定义数组类型 )
int array[10] 的数据类型是 int [10] , 其中 int 是元素类型 , [10] 是元素个数 ;
韩曙亮
2023/03/29
1.8K0
【C 语言】数组 ( 数组类型表达 | 定义数组类型 )
【进阶指针一】字符数组&数组指针&指针数组
目录 1.初阶指针内容回顾 2.字符指针 2-1 字符指针长什么样? 2-2 误区: 2-3  代码一和代码二的异同: 2-4 关于字符常量区: 2-5 一道为了区分栈区和字符常量区&&字符数组和字符指针的面试题:  3.指针数组 3-1 指针数组长什么样捏? 3-2 初级使用(或者说给你看一下基本使用): 3-3这才是指针数组的正确使用方法!【指针数组模拟打印二维数组】  4. 数组指针 4-1 区分取地址数组名和数组名(老生常谈了) 4-2 辨析数组指针和指针数组  4-3 学会了?来看一个小测试
MicroFrank
2023/01/16
9850
C语言数组——字符数组
字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节的大小,使用long型和int型来定义字符数组会造成资源的浪费,因此一般选择使用char型来定义字符数组。
C语言中文社区
2022/05/30
7.6K0
C语言数组——字符数组
Object数组转String数组
//src:源数组;srcPos:源数组要复制的起始位置;dest:目的数组;destPos:目的数组放置的起始位置;length:复制的长度. public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
全栈程序员站长
2022/08/22
2.4K0
指针数组和数组指针
指针数组 :就是指针的数组,数组的元素是指针;  数组指针:就是指向数组的指针。 简单举例说明:     int *p1[10];    声明了一个数组,数组的元素是int型的指针。     int (*p2)[10]; 声明了一个指针, 指向了一个有十个int元素的数组。 这两种写法主要是因为运算符的优先级, 因为[]的优先级比*高。 第一种写法:p先和[]结合,所以是一个数组,后与*结合,是指针数组。 第二种写法:()的优先级比[]高,*号和p2构成一个指针的定义,指针变量名为p,int 修饰的是数组的
lpxxn
2018/01/31
1.1K0
指针数组和数组指针
VBA数组(六)动态数组
大家好,前面已经介绍过了如何声明数组、数组赋值、静态数组和数组函数等等知识点,本节主要讲解动态数组。
无言之月
2019/10/13
7.4K0
VBA数组(二)声明数组
大家好,上节介绍了数组的维度,索引号、上界和下界的知识,本节继续介绍数组的基础知识,包括数组的分类,以及如何声明数组。关于数组的内容相对抽象,会尽量介绍详尽。
无言之月
2019/10/13
3.5K0

相似问题

数组中的str_replace

23

使用数组的str_replace

24

带数组的str_replace

40

PHP str_replace数组

33

带数组的str_replace

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档