Rumah pembangunan bahagian belakang tutorial php php几个常见有关问题

php几个常见有关问题

Jun 13, 2016 pm 12:03 PM
arr array gt merge

php几个常见问题

一、php浮点数的一个常见问题

? ? ?首先我们先看一个例子:

<?php $f = 0.58;    var_dump(intval($f * 100)); //为啥输出57?>
Salin selepas log masuk

? ? ?为什么输出的是57?这是php的bug吗?有很多人经常会问这样的问题,为了搞懂这个问题,那必须要知道浮点数的表示。

? ? ?浮点数以64位的长度(双精度)为例:会采用1位符号位(E),11指数位(Q),52位尾数(M)表示(一共64位)。

? ? ?①符号位:最高位表示数据的正负,0表示正数,1表示负数。

? ? ?②指数位:表示数据以2为底的冪,指数采用偏移码表示;

? ? ?③尾数:表示数据小数后的有效数字。

? ? ?这里的关键点就在于,小数在二进制的表示,关于小数如何用二进制表示,如下:

? ? ?1、我们先讲解一下整数部分如何用二进制表示,如下图:


?就是用整数除以2查看它的余数,直到为0位置。整数部分计算非常简单,那下面查看小数部分如何计算

? ? ?2、小数部分用二进制表述计算方法如下:

? ? ?例如:5.6。整数部分5的二进制为101

? ? ?小数部分0.6,有这样一个公式:*2 如果1 就为1,基数=基数-1。

? ? ?则:0.6*2=1.2>0 ?那么就是1 ?基数=1.2-1=0.2

? ? ? ? ? ?0.2*2=0.4

? ? ? ? ? ?0.4*2=0.8

? ? ? ? ? ?0.8*2=1.6>1 ? 那么就为1 ?基数为1.6-1=0.6

? ? ? ? ? ?... ...

? ? ? ? ??所以5.6可以表示为:101.1001...

? ? ?3、0.58对于二进制表示来说,是无限长的值如下:

0.58的二进制表示基本上(52位)是: 00101000111101011100001010001111010111000010100011110.57的二进制表示基本上(52位)是: 0010001111010111000010100011110101110000101000111101
Salin selepas log masuk

? ? ?至于0.58 * 100的具体浮点数乘法,?我们不考虑那么细,就以模糊的心意来看:0.58*100=57.999999999。那么intval一下,自然就是57了。

? ? ?可见, 这个问题的关键点就是: “你看似有穷的小数, 在计算机的二进制表示里却是无穷的”。

二、php数组合并

? ? 一提到数组合并,我们会想到array_merge函数或者array_merge_recursive函数,其实还有一种方式,这种方式大家平时很少想到,就是“+”运算符。我们分别看一下他们的用法:

? ? 1、array_merge在数组的下标为整数类型时:

$arr1 = array(1=>1,2=>2,3=>3);$arr2 = array(1=>2,2=>3,3=>4);$arr3 = array_merge($arr1,$arr2);print_r($arr3);//输出为Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 2 [4] => 3 [5] => 4 ) 
Salin selepas log masuk
? ?我们可以看到原有数组的下标丢弃,然后重新按照原来数组的顺序生成了一个新的合并后的数组。

? ? 2、array_merge在数组的下标为字符串类型时:

$arr1 = array('aa'=>1,'bb'=>2,'cc'=>3);$arr2 = array('bb'=>'b','cc'=>'c','dd'=>4);$arr3 = array_merge($arr1,$arr2);print_r($arr3);//输出为Array ( [aa] => 1 [bb] => b [cc] => c [dd] => 4 ) 
Salin selepas log masuk
? ? 我们可以看到数组的下标保留,但是如果原数组中存在下标一致的情况,后面数组的值就覆盖前面数组的值。

? ?3、array_merge_recursive在数组的下标为整数类型时:

$arr1 = array(1=>1,2=>2,3=>3);$arr2 = array(1=>2,2=>3,3=>4);$arr3 = array_merge_recursive($arr1,$arr2);print_r($arr3);//输出为Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 2 [4] => 3 [5] => 4 ) 
Salin selepas log masuk

? ?发现效果与array_merge相同。

? ?4、array_merge_recursive在数组的下标为字符串类型时:

$arr1 = array('aa'=>1,'bb'=>2,'cc'=>3);$arr2 = array('bb'=>'b','cc'=>'c','dd'=>4);$arr3 = array_merge_recursive($arr1,$arr2);print_r($arr3);//输出为Array ( [aa] => 1 [bb] => Array ( [0] => 2 [1] => b ) [cc] => Array ( [0] => 3 [1] => c ) [dd] => 4 ) 
Salin selepas log masuk

? ?我们发现下标保留,而且如果原数组有下标一致的情况,也不会出现数值覆盖的情况。而是生成一个数组存放这些值。

? ?5、当采用“+”运算符时:

$arr1 = array(1=>1,2=>2,3=>3);$arr2 = array(1=>2,2=>3,3=>4);$arr3 = $arr1+$arr2;print_r($arr3);//输出为Array ( [1] => 1 [2] => 2 [3] => 3 ) 
Salin selepas log masuk
$arr1 = array('aa'=>1,'bb'=>2,'cc'=>3);$arr2 = array('bb'=>'b','cc'=>'c','dd'=>4);$arr3 = $arr1+$arr2;print_r($arr3);//输出为Array ( [aa] => 1 [bb] => 2 [cc] => 3 [dd] => 4 ) 
Salin selepas log masuk

? ?这个我们就可以知道,不论下标类型为数字还是字符串,如果原数组存在下标一致的情况,那么就不在存储后面数组的数据。其实“+”的作用就是补全的功能,将前面数组中下标还未出现的数据由后面数组补全到这里面。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara Huawei GT3 Pro dan GT4? Apakah perbezaan antara Huawei GT3 Pro dan GT4? Dec 29, 2023 pm 02:27 PM

Ramai pengguna akan memilih jenama Huawei apabila memilih jam tangan pintar Antaranya, Huawei GT3pro dan GT4 adalah pilihan yang sangat popular. Apakah perbezaan antara Huawei GT3pro dan GT4? 1. Rupa GT4: 46mm dan 41mm, bahan cermin kaca + badan keluli tahan karat + cangkang belakang gentian resolusi tinggi. GT3pro: 46.6mm dan 42.9mm, bahannya ialah kaca nilam + badan titanium/badan seramik + cangkerang belakang seramik 2. GT4 yang sihat: Menggunakan algoritma Huawei Truseen5.5+ terkini, hasilnya akan lebih tepat. GT3pro: Penambahan elektrokardiogram ECG dan saluran darah serta keselamatan

Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Aug 24, 2023 am 09:48 AM

Mengapa Alat Snipping Tidak Berfungsi pada Windows 11 Memahami punca masalah boleh membantu mencari penyelesaian yang betul. Berikut ialah sebab utama Alat Snipping mungkin tidak berfungsi dengan betul: Focus Assistant dihidupkan: Ini menghalang Snipping Tool daripada dibuka. Aplikasi rosak: Jika alat snipping ranap semasa pelancaran, ia mungkin rosak. Pemacu grafik lapuk: Pemacu yang tidak serasi mungkin mengganggu alat snipping. Gangguan daripada aplikasi lain: Aplikasi lain yang sedang berjalan mungkin bercanggah dengan Alat Snipping. Sijil telah tamat tempoh: Ralat semasa proses naik taraf boleh menyebabkan penyelesaian mudah ini sesuai untuk kebanyakan pengguna dan tidak memerlukan sebarang pengetahuan teknikal khusus. 1. Kemas kini apl Windows dan Microsoft Store

Isih tatasusunan menggunakan fungsi Array.Isih dalam C# Isih tatasusunan menggunakan fungsi Array.Isih dalam C# Nov 18, 2023 am 10:37 AM

Tajuk: Contoh menggunakan fungsi Array.Sort untuk mengisih tatasusunan dalam Teks C#: Dalam C#, tatasusunan ialah struktur data yang biasa digunakan dan operasi pengisihan tatasusunan selalunya diperlukan. C# menyediakan kelas Array, yang mempunyai kaedah Isih untuk menyusun tatasusunan dengan mudah. Artikel ini akan menunjukkan cara menggunakan fungsi Array.Sort dalam C# untuk mengisih tatasusunan dan memberikan contoh kod khusus. Pertama, kita perlu memahami penggunaan asas fungsi Array.Sort. Susunan.Jadi

Cara Membetulkan Ralat Tidak Dapat Menyambung ke App Store pada iPhone Cara Membetulkan Ralat Tidak Dapat Menyambung ke App Store pada iPhone Jul 29, 2023 am 08:22 AM

Bahagian 1: Langkah Penyelesaian Masalah Awal Menyemak Status Sistem Apple: Sebelum menyelidiki penyelesaian yang rumit, mari kita mulakan dengan asas. Masalahnya mungkin tidak terletak pada peranti anda; Lawati halaman Status Sistem Apple untuk melihat sama ada AppStore berfungsi dengan betul. Jika terdapat masalah, anda hanya boleh menunggu Apple membetulkannya. Semak sambungan Internet anda: Pastikan anda mempunyai sambungan internet yang stabil kerana isu "Tidak dapat menyambung ke AppStore" kadangkala boleh dikaitkan dengan sambungan yang lemah. Cuba tukar antara Wi-Fi dan data mudah alih atau tetapkan semula tetapan rangkaian (Umum > Tetapkan Semula > Tetapkan Semula Tetapan Rangkaian > Tetapan). Kemas kini versi iOS anda:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Kaedah mudah dan jelas untuk menggunakan fungsi PHP array_merge_recursive(). Kaedah mudah dan jelas untuk menggunakan fungsi PHP array_merge_recursive(). Jun 27, 2023 pm 01:48 PM

Apabila pengaturcaraan dalam PHP, kita selalunya perlu menggabungkan tatasusunan. PHP menyediakan fungsi array_merge() untuk melengkapkan penggabungan tatasusunan, tetapi apabila kunci yang sama wujud dalam tatasusunan, fungsi ini akan menimpa nilai asal. Untuk menyelesaikan masalah ini, PHP juga menyediakan fungsi array_merge_recursive() dalam bahasa, yang boleh menggabungkan tatasusunan dan mengekalkan nilai kunci yang sama, menjadikan reka bentuk program lebih fleksibel. array_merge

Cara menggunakan fungsi array_combine dalam PHP untuk menggabungkan dua tatasusunan menjadi tatasusunan bersekutu Cara menggunakan fungsi array_combine dalam PHP untuk menggabungkan dua tatasusunan menjadi tatasusunan bersekutu Jun 26, 2023 pm 01:41 PM

Dalam PHP, terdapat banyak fungsi tatasusunan berkuasa yang boleh menjadikan operasi tatasusunan lebih mudah dan lebih pantas. Apabila kita perlu menggabungkan dua tatasusunan ke dalam tatasusunan bersekutu, kita boleh menggunakan fungsi array_combine PHP untuk mencapai operasi ini. Fungsi ini sebenarnya digunakan untuk menggabungkan kekunci satu tatasusunan sebagai nilai tatasusunan lain ke dalam tatasusunan bersekutu baharu. Seterusnya, kami akan menerangkan cara menggunakan fungsi array_combine dalam PHP untuk menggabungkan dua tatasusunan menjadi tatasusunan bersekutu. Ketahui tentang array_comb

Penjelasan terperinci tentang penggunaan fungsi PHP array_fill(). Penjelasan terperinci tentang penggunaan fungsi PHP array_fill(). Jun 27, 2023 am 08:42 AM

Dalam pengaturcaraan PHP, tatasusunan ialah struktur data yang sangat penting yang boleh mengendalikan sejumlah besar data dengan mudah. PHP menyediakan banyak fungsi berkaitan tatasusunan, array_fill() adalah salah satu daripadanya. Artikel ini akan memperkenalkan secara terperinci penggunaan fungsi array_fill(), serta beberapa petua dalam aplikasi praktikal. 1. Gambaran keseluruhan fungsi array_fill() Fungsi array_fill() adalah untuk mencipta tatasusunan nilai yang sama dengan panjang yang ditentukan. Secara khusus, sintaks fungsi ini ialah

See all articles