2d dizisi oluşturmanın en kolay yolu nedir? Buna benzer bir şey yapmayı umuyordum:
declare int d[0..m, 0..n]
Yanıtlar:
Ayrıca, dizinin dizinini belirterek bir ilişkilendirilebilir dizi veya "karma tablo" benzeri bir dizi oluşturabilirsiniz.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Eşdeğeri
$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';
Aşağıdakiler eşdeğerdir ve iki boyutlu bir dizi ile sonuçlanır:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
veya
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Sadece ilan mı? Mecbur değilsin. Değişkenin var olduğundan emin olun:
$d = array();
Diziler dinamik olarak yeniden boyutlandırılır ve var olmayan öğeye herhangi bir şey yazma girişimi onu oluşturur (ve gerekirse tüm diziyi oluşturur)
$d[1][2] = 3;
Bu, önceden bildirim olmaksızın herhangi bir sayıda boyut için geçerlidir.
countDoğru boyutta kullanabilirsin , örneğin count($d[1]), senin fikrini yanlış anlamıyorsam?
İlk olarak, PHP'nin çok boyutlu dizileri yoktur, dizilerden oluşan dizileri vardır.
İkinci olarak, bunu yapacak bir işlev yazabilirsiniz:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Basit, "giderken doldurun" türü bir çözüm için:
$foo = array(array());
Bu size $ foo [ n ] [ n ] 'yi n <= ∞ tutabilen esnek sözde iki boyutlu bir dizi verecektir (elbette bellek boyutunun olağan kısıtlamaları ile sınırlandırılırsınız, ama umduğum fikri anladınız). Bu, teoride ihtiyaç duyduğunuz sayıda alt dizi oluşturmak için genişletilebilir.
Bildiğim kadarıyla bunu yapmak için yerleşik bir php işlevi bulunmuyor, bunu bir döngü veya @Amber tarafından yanıtta belirtilen dizi_fill gibi bir şeyi özyinelemeli olarak çağıran özel bir yöntem aracılığıyla yapmanız gerekir;
Boş ama önceden hazırlanmış bir dizi dizisi yarattığınızı varsayıyorum. Örneğin, 3 diziden oluşan bir dizinin aşağıdaki gibi nihai sonuçlarını istiyorsunuz :
$final_array = array(array(), array(), array());
Bu sadece kodu elden geçirmek basittir, ancak 3 diziden oluşan 3 diziden oluşan bir dizi gibi gelişigüzel boyutlu bir dizi için, kullanımdan önce başlatmak karmaşıklaşmaya başlar:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...vb...
Hayal kırıklığı yaşıyorum. Hataları kontrol etmeden veya atmadan kullanmak için herhangi bir derinlikte başlatılmış dizileri bildirmenin kolay bir yolunu bulmak güzel olurdu.
atli'nin cevabı bunu anlamama gerçekten yardımcı oldu. İşte iki boyutlu bir dizide nasıl yineleme yapılacağına dair bir örnek. Bu örnek, bir dizinin bilinen adları için değerleri nasıl bulacağınızı ve ayrıca orada bulduğunuz tüm alanlardan geçtiğiniz bir foreach'ı gösterir. Umarım birine yardımcı olur.
$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++;
}
}
Çıktılar:
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
Ve benim için bir dizinin seyrek olup olmayacağı hakkındaki argüman bağlama bağlıdır.
Örneğin, $ a [6] [9] doldurulmamışsa, örneğin "" veya 0 ile doldurulan $ a [6] [9] ile eşdeğerdir.
$r = array("arr1","arr2");
tek bir dizi öğesini yankılamak için yazmanız gerekir:
echo $r[0];
echo $r[1];
çıktı: arr1 arr2
Tek bir satır kullanarak basit bir değer için çok boyutlu diziyi hızlı bir şekilde oluşturmak istiyorsanız, şu şekilde yapmak için bu dizi kitaplığını kullanmanızı tavsiye ederim :
$array = Arr::setNestedElement([], '1.2.3', 'value');
hangisi üretecek
[
1 => [
2 => [
3 => 'value'
]
]
]
Bunu deneyebilirsiniz, ancak ikinci boyut değerleri dizinlere eşit olacaktır:
$array = array_fill_keys(range(0,5), range(0,5));
boş dizi için biraz daha karmaşık:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
Başka bir dizide bir dizi tanımlamanız gerekir.
$arr = array(array(content), array(content));
Misal:
$arr = array(array(1,2,3), array(4,5,6));
Diziden ilk öğeyi almak için kullanacaksınız $arr[0][0], bu dizideki ilk dizideki ilk öğe gibi .
dizideki ikinci dizideki $arr[1][0]ilk öğeyi döndürür .