ฉันมีคีย์อาร์เรย์ php ที่มีอักขระแปลก ๆ มากมาย
อนุญาตหรือไม่ มีข้อ จำกัด ในสิ่งที่ฉันใช้ไม่ได้หรือไม่?
ฉันมีคีย์อาร์เรย์ php ที่มีอักขระแปลก ๆ มากมาย
อนุญาตหรือไม่ มีข้อ จำกัด ในสิ่งที่ฉันใช้ไม่ได้หรือไม่?
คำตอบ:
ตามคู่มือ :
คีย์อาจเป็นจำนวนเต็มหรือสตริงก็ได้ ค่าสามารถเป็นประเภทใดก็ได้
นอกจากนี้การร่ายสำคัญต่อไปนี้จะเกิดขึ้น:
- สตริงที่มีจำนวนเต็มที่ถูกต้องจะถูกเหวี่ยงเป็นประเภทจำนวนเต็ม เช่นคีย์ "8" จะถูกจัดเก็บไว้ภายใต้ 8 จริง ๆ ในทางกลับกัน "08" จะไม่ถูกส่งเนื่องจากไม่ใช่จำนวนเต็มทศนิยมที่ถูกต้อง
- ลอยยังถูกโยนเป็นจำนวนเต็มซึ่งหมายความว่าส่วนที่เป็นเศษส่วนจะถูกตัดทอน เช่นคีย์ 8.7 จะถูกเก็บไว้ภายใต้ 8
- Bools จะถูกส่งไปยังจำนวนเต็มเช่นกันนั่นคือคีย์จริงจะถูกเก็บไว้ภายใต้ 1 และคีย์เท็จภายใต้ 0
- Null จะถูกส่งไปยังสตริงว่างนั่นคือค่าว่างของคีย์จะถูกเก็บไว้ภายใต้ ""
- ไม่สามารถใช้อาร์เรย์และวัตถุเป็นคีย์ได้ การทำเช่นนี้จะได้รับคำเตือน: ประเภทออฟเซ็ตที่ไม่ถูกต้อง
คู่มืออีกครั้ง :
สตริงคือชุดของอักขระโดยที่อักขระจะเหมือนกับไบต์ ซึ่งหมายความว่า PHP รองรับชุดอักขระ 256 ตัวเท่านั้นและด้วยเหตุนี้จึงไม่มีการรองรับ Unicode แบบเนทีฟ ดูรายละเอียดประเภทสตริง
ดังนั้นในระยะสั้นสตริงใด ๆ ก็สามารถเป็นกุญแจสำคัญได้ และสตริงสามารถมีข้อมูลไบนารี (สูงสุด 2GB) ดังนั้นคีย์สามารถเป็นข้อมูลไบนารีใดก็ได้ (เนื่องจากสตริงสามารถเป็นข้อมูลไบนารีใดก็ได้)
การใช้คีย์อาร์เรย์แบบสุ่ม (ถูกต้อง):
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
คีย์ต้องเป็นสตริงหรือจำนวนเต็ม มีการแคสต์บางอย่างเกิดขึ้น แต่ฉันคิดว่าคู่มือนี้อธิบายได้ดี:
คีย์อาจเป็นจำนวนเต็มหรือสตริงก็ได้ ค่าสามารถเป็นประเภทใดก็ได้
นอกจากนี้การร่ายสำคัญต่อไปนี้จะเกิดขึ้น:
- สตริงที่มีจำนวนเต็มที่ถูกต้องจะถูกเหวี่ยงเป็นประเภทจำนวนเต็ม เช่นคีย์ "8" จะถูกจัดเก็บไว้ภายใต้ 8 จริง ๆ ในทางกลับกัน "08" จะไม่ถูกส่งเนื่องจากไม่ใช่จำนวนเต็มทศนิยมที่ถูกต้อง
- ลอยยังถูกโยนเป็นจำนวนเต็มซึ่งหมายความว่าส่วนที่เป็นเศษส่วนจะถูกตัดทอน เช่นคีย์ 8.7 จะถูกเก็บไว้ภายใต้ 8
- Bools จะถูกส่งไปยังจำนวนเต็มเช่นกันนั่นคือคีย์จริงจะถูกเก็บไว้ภายใต้ 1 และคีย์เท็จภายใต้ 0
- Null จะถูกส่งไปยังสตริงว่างนั่นคือค่าว่างของคีย์จะถูกเก็บไว้ภายใต้ ""
- ไม่สามารถใช้อาร์เรย์และวัตถุเป็นคีย์ได้ การทำเช่นนี้จะได้รับคำเตือน: ประเภทออฟเซ็ตที่ไม่ถูกต้อง
ฉันพบคำตอบนี้กำลังมองหาข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่ฉันมี ฉันใช้สตริงที่มีอักขระ UTF-8 อยู่ในนั้นซึ่งจะใช้ไม่ได้เป็นคีย์ของอาร์เรย์ที่ฉันมี
สิ่งที่ต้องการ
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
ทางออก (ไม่ใหญ่หรือฉลาด) สำหรับฉันคือทำสิ่งนี้ ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
bin2hex
ดีกว่าที่จะใช้เป็นสำคัญเพราะมันรับประกันได้ว่าจะไม่ซ้ำกันซึ่งแตกต่างและมักจะกลับไปที่เดิมโดยใช้md5
hex2bin
อาจเร็วกว่ามากmd5
เช่นกัน
คีย์อาร์เรย์ PHP อาจเป็นจำนวนเต็มหรือสตริง สตริง PHP คืออาร์เรย์ไบต์ซึ่งหมายถึงลำดับของไบต์ ไม่มีสตริงประเภทอื่นและ PHP ไม่ได้กำหนดข้อ จำกัด พิเศษใด ๆ เกี่ยวกับสตริงคีย์อาร์เรย์ กล่าวอีกนัยหนึ่ง: ตราบใดที่มันเป็นสตริงอะไรก็จะไป
ทุกสิ่งที่คุณสามารถใส่ลงในสตริง PHP สามารถใช้เป็นคีย์อาร์เรย์ได้ ไม่ จำกัด จำนวนอักขระที่อนุญาต
$a = array();
$x = 'long string of random garage';
echo $a[$x]; // this is ok
$x = array();
echo $a[$x]; // not ok
หากคีย์ที่ซับซ้อนทำให้เกิดข้อผิดพลาด "ดัชนีที่ไม่ได้กำหนด" คุณอาจมีปัญหา "ตัด"
ฉันรู้สึกไม่ดีเพราะคีย์ที่ซับซ้อนกำลังคายข้อผิดพลาด "ดัชนีที่ไม่ได้กำหนด" ออกมาและฉันคิดว่าอาจเป็นการละเมิดไวยากรณ์ คีย์อาร์เรย์ที่ทำให้เกิดข้อผิดพลาดถูกสร้างขึ้นจากฟิลด์จากแบบสอบถามฐานข้อมูล MySQL ที่ฉันกำลังแปลงเป็นคีย์และใช้ในอาร์เรย์ใหม่ คีย์มีลักษณะดังนี้pl_1DNKoiJKwotCqAycickBVhTy
และนี่คือวิธีสร้างโค้ด
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
เมื่อในความเป็นจริง$keyval
และ$dbquery['fieldname']
ดูเหมือนว่าจะเป็นคู่ที่สมบูรณ์แบบ (ตรวจสอบด้วยสายตาโดยสะท้อนทั้งสองไปยังเบราว์เซอร์) ความลึกลับได้รับการแก้ไขโดยใช้trim
ในคำสั่งที่สองเช่นนี้$keyval = trim($array_two['fieldname']);
เมื่อ 'ตัด' แล้ว php จะไม่บ่นอีกต่อไป
หวังว่าสิ่งนี้จะช่วยคนอื่น ๆ จากช่วงเวลาที่น่าผิดหวัง ...
โดยส่วนตัวแล้วฉันไม่มีปัญหากับอักขระที่ผิดปกติในคีย์อาร์เรย์ สิ่งที่เป็นและไม่ถูกกฎหมายไม่ได้รับการจัดทำเป็นเอกสารอย่างดีนอกจากจะบอกว่าคีย์ต้องเป็นสเกลาร์ ทางออกที่ดีที่สุดของคุณคือลองใช้ดู
นอกเหนือจากคำตอบทั้งหมดที่เป็นจริง: คุณสามารถใช้PSRซึ่งเป็นกฎบางอย่างระหว่างโปรแกรมเมอร์ที่ดีที่สุดเพื่อให้มีรูปแบบการเข้ารหัสที่ดีและเป็นมาตรฐาน
ในอาร์เรย์ php คุณไม่สามารถใช้คีย์: 2.3 หรือตัวเลขทศนิยม
เข้ารหัสหน้า php ใน ANSI "é" จะสามารถใช้งานได้ (Cinémaจะไม่แสดงเป็นCiné ma) ใน Notepad ++ เพียงใช้เมนู Encode => Convert ANSI และบันทึก
é
OP ไม่ใช้ Notepad ++ หลังจากทั้งหมด?
$a = (object) ['@km³' => 123]; error_log($a->@km³);