Trong hướng dẫn này, bạn sẽ học cách tạo, định dạng, sửa đổi và xóa các chuỗi trong Python. Ngoài ra, bạn sẽ được giới thiệu về các hoạt động và chức năng chuỗi khác nhau.

Bạn đang xem : chuỗi trong ví dụ python

Chuỗi trong Python là gì?

Một chuỗi là một chuỗi các ký tự.

Một ký tự chỉ đơn giản là một biểu tượng. Ví dụ: ngôn ngữ tiếng Anh có 26 ký tự.

Máy tính không xử lý các ký tự, chúng xử lý các số (nhị phân). Mặc dù bạn có thể nhìn thấy các ký tự trên màn hình của mình, nhưng bên trong nó được lưu trữ và thao tác dưới dạng kết hợp của số 0 và số 1.

Việc chuyển đổi ký tự thành số này được gọi là mã hóa và quy trình ngược lại là giải mã. ASCII và Unicode là một số bảng mã phổ biến được sử dụng.

Trong Python, một chuỗi là một chuỗi các ký tự Unicode. Unicode được giới thiệu để bao gồm mọi ký tự trong tất cả các ngôn ngữ và mang lại sự đồng nhất trong bảng mã. Bạn có thể tìm hiểu về Unicode từ Python Unicode .

Làm thế nào để tạo một chuỗi trong Python?

Có thể tạo chuỗi bằng cách đặt các ký tự bên trong một dấu ngoặc kép hoặc dấu ngoặc kép. Ngay cả dấu ngoặc kép có thể được sử dụng trong Python nhưng thường được sử dụng để biểu thị chuỗi nhiều dòng và chuỗi doc.

 # xác định chuỗi trong Python
# tất cả những điều sau đây đều tương đương
my_string = 'Xin chào'
print (my_string)

my_string = "Xin chào"
print (my_string)

my_string = '' 'Xin chào' ''
print (my_string)

# chuỗi dấu ngoặc kép có thể kéo dài nhiều dòng
my_string = "" "Xin chào, chào mừng đến với
           thế giới của Python "" "
print (my_string)  

Khi bạn chạy chương trình, kết quả đầu ra sẽ là:

Xin chào
Xin chào
Xin chào
Xin chào chào mừng bạn đến với
           thế giới của Python 

Làm cách nào để truy cập các ký tự trong một chuỗi?

Chúng tôi có thể truy cập các ký tự riêng lẻ bằng cách sử dụng lập chỉ mục và một loạt các ký tự bằng cách sử dụng cắt. Chỉ mục bắt đầu từ 0. Cố gắng truy cập một ký tự ngoài phạm vi chỉ mục sẽ làm tăng IndexError . Chỉ mục phải là một số nguyên. Chúng tôi không thể sử dụng phao hoặc các loại khác, điều này sẽ dẫn đến TypeError .

Python cho phép lập chỉ mục phủ định cho các chuỗi của nó.

Chỉ mục của -1 đề cập đến mục cuối cùng, -2 đến mục cuối cùng thứ hai, v.v. Chúng tôi có thể truy cập một loạt các mục trong một chuỗi bằng cách sử dụng toán tử cắt : (dấu hai chấm).

 #Truy cập ký tự chuỗi trong Python
str = 'programmiz'
print ('str =', str)

# ký tự đầu tiên
print ('str [0] =', str [0])

# ký tự cuối cùng
print ('str [-1] =', str [-1])

#slicing ký tự thứ 2 đến thứ 5
print ('str [1: 5] =', str [1: 5])

#slicing ký tự cuối cùng từ thứ 6 đến thứ 2
print ('str [5: -2] =', str [5: -2])  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

str = programmiz
str [0] = p
str [-1] = z
str [1: 5] = rogr
str [5: -2] = am 

Nếu chúng tôi cố gắng truy cập một chỉ mục ngoài phạm vi hoặc sử dụng các số không phải là số nguyên, chúng tôi sẽ gặp lỗi.

 # chỉ mục phải nằm trong phạm vi
& gt; & gt; & gt; my_string [15]
...
IndexError: chỉ mục chuỗi nằm ngoài phạm vi

# chỉ mục phải là một số nguyên
& gt; & gt; & gt; my_string [1.5]
...
TypeError: chỉ số chuỗi phải là số nguyên  

Việc cắt lát có thể được hình dung tốt nhất bằng cách xem xét chỉ mục nằm giữa các phần tử như hình dưới đây.

Nếu chúng tôi muốn truy cập một dải ô, chúng tôi cần chỉ mục sẽ chia nhỏ phần đó khỏi chuỗi.

Cắt chuỗi trong Python

Làm cách nào để thay đổi hoặc xóa một chuỗi?

Các chuỗi là bất biến. Điều này có nghĩa là các phần tử của một chuỗi không thể thay đổi khi chúng đã được gán. Chúng tôi có thể chỉ cần gán lại các chuỗi khác nhau cho cùng một tên.

 & gt; & gt; & gt; my_string = 'programmiz'
& gt; & gt; & gt; my_string [5] = 'a'
...
TypeError: Đối tượng 'str' không hỗ trợ gán mục
& gt; & gt; & gt; my_string = 'Python'
& gt; & gt; & gt; my_string
'Python'  

Chúng tôi không thể xóa hoặc xóa các ký tự khỏi một chuỗi. Tuy nhiên, bạn có thể xóa hoàn toàn chuỗi bằng từ khóa del .

 & gt; & gt; & gt; del my_string [1]
...
TypeError: Đối tượng 'str' không hỗ trợ xóa mục
& gt; & gt; & gt; del my_string
& gt; & gt; & gt; my_string
...
NameError: tên 'my_string' không được xác định  

Các phép toán chuỗi Python

Có nhiều thao tác có thể được thực hiện với chuỗi, khiến nó trở thành một trong những kiểu dữ liệu được sử dụng nhiều nhất trong Python.

Để tìm hiểu thêm về các kiểu dữ liệu có sẵn trong Python, hãy truy cập: Kiểu dữ liệu Python

Xem Thêm  TOP (Transact-SQL) - Máy chủ SQL - từ khóa hàng đầu trong máy chủ sql

Kết hợp của hai hoặc nhiều chuỗi

Việc nối hai hoặc nhiều chuỗi thành một chuỗi được gọi là nối.

Toán tử + thực hiện điều này trong Python. Chỉ cần viết hai ký tự chuỗi với nhau cũng có thể nối chúng.

Toán tử * có thể được sử dụng để lặp lại chuỗi trong một số lần nhất định.

 # Hoạt động chuỗi Python
str1 = 'Xin chào'
str2 = 'Thế giới!'

# sử dụng +
print ('str1 + str2 =', str1 + str2)

# sử dụng *
print ('str1 * 3 =', str1 * 3)  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

str1 + str2 = HelloWorld!
str1 * 3 = HelloHelloHello 

Viết hai ký tự chuỗi với nhau cũng sẽ nối chúng giống như toán tử + .

Nếu chúng ta muốn nối các chuỗi thành các dòng khác nhau, chúng ta có thể sử dụng dấu ngoặc đơn.

 & gt; & gt; & gt; # hai ký tự chuỗi với nhau
& gt; & gt; & gt; 'Chào thế giới!'
'Chào thế giới!'

& gt; & gt; & gt; # sử dụng dấu ngoặc đơn
& gt; & gt; & gt; s = ('Xin chào'
...      'Thế giới')
& gt; & gt; & gt; S
'Xin chào thế giới'  

Lặp lại Thông qua một chuỗi

Chúng tôi có thể lặp lại một chuỗi bằng vòng lặp for . Đây là một ví dụ để đếm số chữ ‘l trong một chuỗi.

 # Lặp lại qua một chuỗi
đếm = 0
cho lá thư trong 'Hello World':
    if (chữ cái == 'l'):
        đếm + = 1
print (đếm, 'các chữ cái tìm thấy')  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

3 chữ cái được tìm thấy 

Kiểm tra tư cách thành viên của chuỗi

Chúng tôi có thể kiểm tra xem chuỗi con có tồn tại trong một chuỗi hay không bằng cách sử dụng từ khóa trong .

 & gt; & gt; & gt; 'a' trong 'chương trình'
ĐÚNG VẬY
& gt; & gt; & gt; 'at' not in 'battle'
Sai  

Các hàm tích hợp để làm việc với Python

Nhiều hàm tích hợp khác hoạt động với trình tự cũng hoạt động với chuỗi.

Một số cái thường được sử dụng là enumerate () len () . Hàm enumerate () trả về một đối tượng liệt kê. Nó chứa chỉ mục và giá trị của tất cả các mục trong chuỗi dưới dạng cặp. Điều này có thể hữu ích cho việc lặp lại.

Tương tự, len () trả về độ dài (số ký tự) của chuỗi.

 str = 'cold'

# enumerate ()
list_enumerate = list (enumerate (str))
print ('list (enumerate (str) =', list_enumerate)

# số lượng ký tự
print ('len (str) =', len (str))  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

list (enumerate (str) = [(0, 'c'), (1, 'o'), (2, 'l'), (3, 'd')]
len (str) = 4 

Định dạng chuỗi Python

Trình tự Thoát

Nếu chúng ta muốn in một văn bản như Ngài đã nói, “Có gì ở đó?”, chúng ta không thể sử dụng dấu ngoặc kép hoặc dấu ngoặc kép. Điều này sẽ dẫn đến một SyntaxError vì bản thân văn bản chứa cả dấu nháy đơn và dấu ngoặc kép.

 & gt; & gt; & gt; print ("Anh ấy nói," Có gì ở đó? "")
...
Lỗi cú pháp: cú pháp không hợp lệ
& gt; & gt; & gt; print ('Anh ấy nói, "Có gì ở đó?"')
...
SyntaxError: cú pháp không hợp lệ  

Một cách để giải quyết vấn đề này là sử dụng dấu ngoặc kép. Ngoài ra, chúng ta có thể sử dụng trình tự thoát.

Chuỗi thoát bắt đầu bằng dấu gạch chéo ngược và được diễn giải theo cách khác. Nếu chúng ta sử dụng một dấu nháy đơn để đại diện cho một chuỗi, thì tất cả các dấu nháy đơn bên trong chuỗi phải được thoát ra. Tương tự là trường hợp với dấu ngoặc kép. Đây là cách nó có thể được thực hiện để thể hiện văn bản trên.

 # sử dụng dấu ngoặc kép
print ('' 'Anh ấy nói, "Có gì ở đó?"' '')

# thoát dấu ngoặc kép
print ('Anh ấy nói, "Cái gì ở đó?"')

# thoát dấu ngoặc kép
print ("Anh ấy nói, \" Có gì ở đó? \ "")  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

Anh ta nói, "Có gì ở đó?"
Anh ta nói, "Có gì ở đó?"
Anh ấy nói, "Có gì ở đó?" 

Đây là danh sách tất cả các chuỗi thoát được Python hỗ trợ.

Trình tự thoát
Sự mô tả
\dòng mới
Dấu gạch chéo ngược và dòng mới bị bỏ qua
\\
Gạch chéo ngược
\ ‘
Trích dẫn duy nhất
\ ”
Dấu ngoặc kép
\một
Chuông ASCII
\ b
ASCII Backspace
\ f
Nguồn cấp dữ liệu ASCII
\N
Nguồn cấp dữ liệu tuyến tính ASCII
\ r
Vận chuyển ASCII trở lại
\ t
Tab ngang ASCII
\ v
Tab dọc ASCII
\ ooo
Ký tự có giá trị bát phân ooo
\ xHH
Ký tự có giá trị thập lục phân HH

Dưới đây là một số ví dụ

 & gt; & gt; & gt; print ("C: \\ Python32 \\ Lib")
C: \ Python32 \ Lib

& gt; & gt; & gt; print ("Đây là bản in \ nin hai dòng")
Đây là bản in
trong hai dòng

& gt; & gt; & gt; print ("Đây là \ x48 \ x45 \ x58 biểu diễn")
Đây là biểu diễn HEX  

Chuỗi thô để bỏ qua chuỗi thoát

Đôi khi, chúng tôi có thể muốn bỏ qua các chuỗi thoát bên trong một chuỗi. Để làm điều này, chúng ta có thể đặt r hoặc R trước chuỗi. Điều này có nghĩa rằng đó là một chuỗi thô và bất kỳ chuỗi thoát nào bên trong nó sẽ bị bỏ qua.

 & gt; & gt; & gt; print ("Đây là \ x61 \ ngood example")
Đây là một
ví dụ tốt
& gt; & gt; & gt; print (r "Đây là \ x61 \ ngood example")
Đây là \ x61 \ ngood example  

Phương thức format () để Định dạng Chuỗi

Phương thức format () có sẵn với đối tượng chuỗi rất linh hoạt và mạnh mẽ trong việc định dạng chuỗi. Chuỗi định dạng chứa dấu ngoặc nhọn {} làm trình giữ chỗ hoặc trường thay thế được thay thế.

Xem Thêm  Biến toàn cầu trong Python với các ví dụ [Đã cập nhật] - python sử dụng biến toàn cục

Chúng tôi có thể sử dụng đối số vị trí hoặc đối số từ khóa để chỉ định thứ tự.

 # Phương thức định dạng chuỗi Python ()

# đơn hàng mặc định (ngầm định)
default_order = "{}, {} và {}". format ('John', 'Bill', 'Sean')
print ('\ n --- Thứ tự Mặc định ---')
in (default_order)

# order sử dụng đối số vị trí
positional_order = "{1}, {0} và {2}". format ('John', 'Bill', 'Sean')
print ('\ n --- Thứ tự Vị trí ---')
print (positional_order)

# thứ tự sử dụng đối số từ khóa
keyword_order = "{s}, {b} và {j}". format (j = 'John', b = 'Bill', s = 'Sean')
print ('\ n --- Thứ tự Từ khoá ---')
print (keyword_order)  

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

--- Đặt hàng mặc định ---
John, Bill và Sean

--- Lệnh vị trí ---
Bill, John và Sean

--- Thứ tự Từ khoá ---
Sean, Bill và John 

Phương thức format () có thể có các đặc điểm định dạng tùy chọn. Chúng được phân tách khỏi tên trường bằng dấu hai chấm. Ví dụ: chúng ta có thể căn trái & lt; , right-justify & gt; hoặc căn giữa ^ một chuỗi trong khoảng trống đã cho.

Chúng tôi cũng có thể định dạng số nguyên dưới dạng nhị phân, thập lục phân, v.v. và số thực có thể được làm tròn hoặc hiển thị ở định dạng số mũ. Có rất nhiều định dạng bạn có thể sử dụng. Truy cập vào đây để biết tất cả định dạng chuỗi có sẵn với phương thức format () .

 & gt; & gt; & gt; # định dạng số nguyên
& gt; & gt; & gt; "Biểu diễn nhị phân của {0} là {0: b}". Format (12)
'Biểu diễn nhị phân của 12 là 1100'

& gt; & gt; & gt; # định dạng float
& gt; & gt; & gt; "Biểu diễn số mũ: {0: e}". Format (1566.345)
'Biểu diễn số mũ: 1.566345e + 03'

& gt; & gt; & gt; # làm tròn số
& gt; & gt; & gt; "Một phần ba là: {0: .3f}". Format (1/3)
'Một phần ba là: 0,333'

& gt; & gt; & gt; # căn chỉnh chuỗi
& gt; & gt; & gt; "| {: & lt; 10} | {: ^ 10} | {: & gt; 10} |" .format ('butter', 'bread', 'ham')
'| bơ | bánh mì | giăm bông | ' 

Định dạng kiểu cũ

Chúng tôi thậm chí có thể định dạng các chuỗi như kiểu sprintf () cũ được sử dụng trong ngôn ngữ lập trình C. Chúng tôi sử dụng toán tử % để thực hiện điều này.

 & gt; & gt; & gt; x = 12.3456789
& gt; & gt; & gt; print ('Giá trị của x là% 3.2f'% x)
Giá trị của x là 12,35
& gt; & gt; & gt; print ('Giá trị của x là% 3.4f'% x)
Giá trị của x là 12.3457  

Các phương thức chuỗi Python phổ biến

Có rất nhiều phương thức có sẵn với đối tượng chuỗi. Phương thức format () mà chúng tôi đã đề cập ở trên là một trong số chúng. Một số phương pháp thường được sử dụng là Lower () , upper () , join () , split () , find () , Replace () , v.v. Dưới đây là danh sách đầy đủ của tất cả các phương thức tích hợp sẵn để làm việc với chuỗi trong Python .

 & gt; & gt; & gt; "PrOgRaMiZ" .lower ()
'programmiz'
& gt; & gt; & gt; "PrOgRaMiZ" .upper ()
'LẬP TRÌNH'
& gt; & gt; & gt; "Điều này sẽ chia tất cả các từ thành một danh sách" .split ()
['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
& gt; & gt; & gt; '' .join (['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
'Điều này sẽ nối tất cả các từ thành một chuỗi'
& gt; & gt; & gt; 'Happy New Year'.find (' ew ')
7
& gt; & gt; & gt; 'Happy New Year'.replace (' Happy ',' Brilliant ')
'Năm mới rực rỡ'  


Xem thêm những thông tin liên quan đến chủ đề chuỗi trong ví dụ python

Python Strings Tutorial | How To Use Strings In Python | Python Tutorial | Python Training | Edureka

  • Tác giả: edureka!
  • Ngày đăng: 2020-05-13
  • Đánh giá: 4 ⭐ ( 6363 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 🔥Edureka Python Certification Training: https://www.edureka.co/python-programming-certification-training
    This Edureka video on ‘Python Strings’ will help you understand how we can use Strings in Python with various methods and operations. Following are the topics discussed:
    00:00 – Introduction
    01:06 – What are Python Strings?
    01:57 – Declaration and Indexing
    03:53 – Accessing The Strings in Python
    10:16 – Python String Methods
    13:40 – String Operations in Python
    14:21 – String Interpolation and Formatting

    🔹Python Tutorial Playlist: https://goo.gl/WsBpKe
    🔹Python Blog Series: http://bit.ly/2sqmP4s

    ———————————————————————————————-

    🔴Do subscribe to our channel and hit the bell icon to never miss an update from us in the future: https://goo.gl/6ohpTV

    Edureka Community: https://bit.ly/EdurekaCommunity
    Instagram: https://www.instagram.com/edureka_learning/
    Facebook: https://www.facebook.com/edurekaIN/
    Twitter: https://twitter.com/edurekain
    LinkedIn: https://www.linkedin.com/company/edureka
    Telegram: https://t.me/edurekaupdates
    SlideShare: https://www.slideshare.net/EdurekaIN
    Meetup: https://www.meetup.com/edureka/

    PythonEdureka Edureka pythonstrings pythonprojects pythonprogramming pythontutorial PythonTraining

    ———————————————————————————————-

    How it Works?
    1. This is a 5 Week Instructor-led Online Course,40 hours of assignment and 20 hours of project work
    2. We have a 24×7 One-on-One LIVE Technical Support to help you with any problems you might face or any clarifications you may require during the course.
    3. At the end of the training, you will be working on a real-time project for which we will provide you a Grade and a Verifiable Certificate!

    ———————————————————————————————-

    About the Course

    Edureka’s Python Online Certification Training will make you an expert in Python programming. It will also help you learn Python the Big data way with integration of Machine learning, Pig, Hive and Web Scraping through beautiful soup. During our Python Certification training, our instructors will help you:

    1. Master the Basic and Advanced Concepts of Python
    2. Understand Python Scripts on UNIX/Windows, Python Editors and IDEs
    3. Master the Concepts of Sequences and File operations
    4. Learn how to use and create functions, sorting different elements, Lambda function, error handling techniques and Regular expressions and using modules in Python
    5. Gain expertise in machine learning using Python and build a Real Life Machine Learning application
    6. Understand the supervised and unsupervised learning and concepts of Scikit-Learn
    7. Master the concepts of MapReduce in Hadoop
    8. Learn to write Complex MapReduce programs
    9. Understand what is PIG and HIVE, Streaming feature in Hadoop, MapReduce job running with Python
    10. Implementing a PIG UDF in Python, Writing a HIVE UDF in Python, Pydoop and/Or MRjob Basics
    11. Master the concepts of Web scraping in Python
    12. Work on a Real Life Project on Big Data Analytics using Python and gain Hands-on Project Experience

    ———————————————————————————————-

    Why learn Python?

    Programmers love Python because of how fast and easy it is to use. Python cuts development time in half with its simple to read syntax and easy compilation feature. Debugging your programs is a breeze in Python with its built in debugger. Using Python makes Programmers more productive and their programs ultimately better. Python continues to be a favorite option for data scientists who use it for building and using Machine learning applications and other scientific computations.
    Python runs on Windows, Linux/Unix, Mac OS and has been ported to Java and .NET virtual machines. Python is free to use, even for the commercial products, because of its OSI-approved open source licence.
    Python has evolved as the most preferred Language for Data Analytics and the increasing search trends on python also indicates that Python is the next “Big Thing” and a must for Professionals in the Data Analytics domain.

    ———————————————————————————————-

    Who should go for python?

    The Python Programming Certification Course is a good fit for the below professionals:
    Programmers, Developers, Technical Leads, Architects, Freshers
    Data Scientists, Data Analysts
    Statisticians and Analysts
    Business Analysts
    Project Managers
    Business Intelligence Managers

    ———————————————————————————————-

    For more information, Please write back to us at sales@edureka.in or call us at IND: 9606058406 / US: 18338555775

Các hàm xử lý chuỗi trong Python

  • Tác giả: toidicode.com
  • Đánh giá: 5 ⭐ ( 8812 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Ở phần đầu của series mình đã giới thiệu với mọi người về chuỗi trong Python rồi, nhưng Python là một ngôn ngữ khá là linh động và mềm dẻo nên nó cũng đã cung cấp cho chúng ta rất nhiều hàm có sẵn dùng để xử lý chuỗi. Bài viết này mình sẽ liệt kê một số hàm hay dùng và ví dụ kèm theo cho mọi người cùng tham khảo.

Chuỗi (String) trong Python

  • Tác giả: www.codehub.com.vn
  • Đánh giá: 5 ⭐ ( 3610 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chuỗi trong python được bao quanh bởi dấu nháy đơn hoặc nháy kép Ví dụ như: ‘hello’ và “hello” là giống nhau

Kiểu chuỗi ký tự (string) trong Python

  • Tác giả: yeulaptrinh.vn
  • Đánh giá: 5 ⭐ ( 6684 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Thao tác với chuỗi ký tự thường rất hay được sử dụng đặc biệt là với những ai mới bắt đầu nghiên cứu về Python. Cũng có khá nhiều bài toán hay ho áp dụng các giải thuật để thao tác với chuỗi ký tư.

Cách Dùng Kiểu Dữ Liệu Chuỗi String Trong Python (Phần 1)

  • Tác giả: mci.edu.vn
  • Đánh giá: 5 ⭐ ( 3129 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: String trong python là một kiểu dữ liệu dạng chuỗi với các dữ liệu được sắp xếp để thể hiện và lưu thông tin dưới dạng chuỗi ký tự hay văn bản.

Phương pháp chuỗi Python:Hướng dẫn từng bước

  • Tác giả: vn.wsxdn.com
  • Đánh giá: 3 ⭐ ( 3430 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Các kiểu dữ liệu cơ bản trong Python 3: Chuỗi (String)

  • Tác giả: gitiho.com
  • Đánh giá: 5 ⭐ ( 6397 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giải thích chuỗi – string là gì trong Python 3, cách sử dụng và các thao tác thường gặp với chuỗi, một số hàm thông dụng và các chuyển đổi loại dữ liệu từ chuỗi sang số,…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Màu nền HTML: Cách tùy chỉnh nền của bạn - html một màu nền

By ads_php