วิธีใดง่ายที่สุดในการสร้างอาร์เรย์ 2d ฉันหวังว่าจะสามารถทำสิ่งที่คล้ายกับสิ่งนี้:
declare int d[0..m, 0..n]
วิธีใดง่ายที่สุดในการสร้างอาร์เรย์ 2d ฉันหวังว่าจะสามารถทำสิ่งที่คล้ายกับสิ่งนี้:
declare int d[0..m, 0..n]
คำตอบ:
คุณยังสามารถสร้างอาร์เรย์ที่เชื่อมโยงกันหรือ "แฮช - ตาราง" เช่นอาร์เรย์โดยการระบุดัชนีของอาร์เรย์
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
ซึ่งเทียบเท่ากับ
$array = array();
$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';
$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';
สิ่งต่อไปนี้เทียบเท่าและส่งผลให้อาร์เรย์สองมิติ:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
หรือ
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
แค่ประกาศ? คุณไม่จำเป็นต้อง ตรวจสอบให้แน่ใจว่ามีตัวแปรอยู่:
$d = array();
อาร์เรย์จะถูกปรับขนาดแบบไดนามิกและพยายามที่จะเขียนสิ่งใด ๆ ไปยังองค์ประกอบที่ไม่มีระยะห่างจะสร้างขึ้น (และสร้างอาร์เรย์ทั้งหมดหากจำเป็น)
$d[1][2] = 3;
สิ่งนี้ใช้ได้กับมิติข้อมูลจำนวนเท่าใดก็ได้โดยไม่มีการประกาศล่วงหน้า
count
กับมิติที่ถูกต้องได้เช่นcount($d[1])
เว้นแต่ฉันจะเข้าใจผิดประเด็นของคุณ?
ประการแรก PHP ไม่มีอาร์เรย์หลายมิติ แต่มีอาร์เรย์ของอาร์เรย์
ประการที่สองคุณสามารถเขียนฟังก์ชันที่จะทำ:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
สำหรับวิธีแก้ปัญหาง่ายๆแบบ "เติมเมื่อคุณไป":
$foo = array(array());
สิ่งนี้จะทำให้คุณได้รับอาร์เรย์สองมิติหลอกที่ยืดหยุ่นซึ่งสามารถเก็บ $ foo [ n ] [ n ] โดยที่n <= ∞ (แน่นอนว่าคุณถูก จำกัด ด้วยข้อ จำกัด ของขนาดหน่วยความจำตามปกติ แต่คุณก็มีความคิดที่ฉันหวังไว้) ตามทฤษฎีแล้วสามารถขยายเพื่อสร้างอาร์เรย์ย่อยได้มากเท่าที่คุณต้องการ
หรือสำหรับอาร์เรย์ขนาดใหญ่ทั้งหมดที่มีค่าเท่ากัน:
$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);
จะสร้าง$m
โดยอาร์เรย์กับชุดทุกอย่างเพื่อ$n
$value
เท่าที่ฉันทราบว่าไม่มีฟังก์ชัน php ในตัวเพื่อทำสิ่งนี้คุณต้องทำผ่านการวนซ้ำหรือผ่านวิธีการที่กำหนดเองที่เรียกซ้ำไปยังบางสิ่งเช่น array_fill inidcated ในคำตอบโดย @Amber;
ฉันสมมติว่าคุณหมายถึงสร้างอาร์เรย์อาร์เรย์ว่างเปล่า แต่อินทิเรีย ตัวอย่างเช่นคุณต้องการผลลัพธ์สุดท้ายเช่นด้านล่างของอาร์เรย์ 3 อาร์เรย์ :
$final_array = array(array(), array(), array());
นี่เป็นเรื่องง่ายเพียงแค่ใช้รหัสมือ แต่สำหรับอาร์เรย์ที่มีขนาดตามอำเภอใจเช่นอาร์เรย์ 3 อาร์เรย์จาก 3 อาร์เรย์จะเริ่มมีความซับซ้อนในการเริ่มต้นก่อนใช้งาน:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
... ฯลฯ ...
ฉันได้รับความยุ่งยาก จะเป็นการดีที่จะมีวิธีง่ายๆในการประกาศอาร์เรย์อาร์เรย์เริ่มต้นของความลึกใด ๆ ที่จะใช้โดยไม่ต้องตรวจสอบหรือโยนข้อผิดพลาด
คำตอบของ atli ช่วยให้ฉันเข้าใจเรื่องนี้จริงๆ นี่คือตัวอย่างของวิธีการวนซ้ำผ่านอาร์เรย์สองมิติ ตัวอย่างนี้แสดงวิธีการค้นหาค่าสำหรับชื่อที่รู้จักของอาร์เรย์และ foreach ที่คุณเพียงแค่ไปยังฟิลด์ทั้งหมดที่คุณพบที่นั่น ฉันหวังว่ามันจะช่วยใครสักคน
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
foreach ( $array as $groupid => $fields) {
echo "hi element ". $groupid . "\n";
echo ". name is ". $fields['name'] . "\n";
echo ". email is ". $fields['email'] . "\n";
$i = 0;
foreach ($fields as $field) {
echo ". field $i is ".$field . "\n";
$i++;
}
}
ผลลัพธ์:
hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
และสำหรับฉันแล้วการโต้แย้งว่าอาร์เรย์ควรเบาบางหรือไม่ขึ้นอยู่กับบริบท
ตัวอย่างเช่นหากไม่มีการเติมข้อมูล $ a [6] [9] จะเท่ากับ $ a [6] [9] ที่ถูกเติมด้วย "" หรือ 0
$r = array("arr1","arr2");
ในการสะท้อนองค์ประกอบอาร์เรย์เดียวคุณควรเขียน:
echo $r[0];
echo $r[1];
ผลลัพธ์จะเป็น: arr1 arr2
และฉันชอบวิธีนี้:
$cars = array
(
array("Volvo",22),
array("BMW",15),
array("Saab",5),
array("Land Rover",17)
);
หากคุณต้องการสร้างอาร์เรย์หลายมิติอย่างรวดเร็วสำหรับค่าง่ายๆโดยใช้ซับเดียวฉันขอแนะนำให้ใช้ไลบรารีอาร์เรย์นี้เพื่อทำสิ่งนี้:
$array = Arr::setNestedElement([], '1.2.3', 'value');
ซึ่งจะผลิต
[
1 => [
2 => [
3 => 'value'
]
]
]
คุณสามารถลองสิ่งนี้ได้ แต่ค่ามิติที่สองจะเท่ากับดัชนี:
$array = array_fill_keys(range(0,5), range(0,5));
ซับซ้อนกว่าเล็กน้อยสำหรับอาร์เรย์ว่าง:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
คุณต้องประกาศอาร์เรย์ในอาร์เรย์อื่น
$arr = array(array(content), array(content));
ตัวอย่าง:
$arr = array(array(1,2,3), array(4,5,6));
ในการรับรายการแรกจากอาร์เรย์คุณจะต้องใช้$arr[0][0]
ซึ่งเหมือนกับรายการแรกจากอาร์เรย์แรกจากอาร์เรย์
$arr[1][0]
จะส่งคืนรายการแรกจากอาร์เรย์ที่สองจากอาร์เรย์