Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Четырехмерный массив
 
 автор: Киналь   (21.12.2007 в 14:25)   письмо автору
 
 

Есть вот такое присвоение:

<?php
$arr
[$mat_h1_1][$mat_h2_1][$mat_h3_1][$mat_h4_1] = $cont_h4;
?>


Все переменные определены, все имеют некоторые строковые значения.Но при выводе массива $arr на экран с помощью print_r() видно, что он трехмерный, то есть четвертый ключ игнорируется. Более того, эксперимент показал, что если написать

</php
               $arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] = 'qwerty';
               $arr[$mat_h1_1][$mat_h2_1][$mat_h3_1][$mat_h4_1] = 'AB';
?>

то элемент массива с координатами $arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] не массив с именем qwerty, а строка "Awerty".

Я где-то по-тупому ошибаюсь?

   
 
 автор: KPETuH   (21.12.2007 в 14:42)   письмо автору
 
   для: Киналь   (21.12.2007 в 14:25)
 

значения ключей?

   
 
 автор: Киналь   (21.12.2007 в 14:48)   письмо автору
 
   для: KPETuH   (21.12.2007 в 14:42)
 

Просто строки текста. Да вот, полностью скрипт:

<?php

function pre($array)
{
 echo 
"<pre>";
 
print_r($array);
 echo 
"</pre>";
}


$mat_h1_1 'этикет1';
$mat_h2_1 'этикет2';
$mat_h3_1 'этикет3';
$mat_h4_1 'этикет4';


 
$arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] = 'qwerty';
 
$arr[$mat_h1_1][$mat_h2_1][$mat_h3_1][$mat_h4_1] = 'AB'pre($arr);


?>

   
 
 автор: Unkind   (21.12.2007 в 15:01)   письмо автору
 
   для: Киналь   (21.12.2007 в 14:48)
 

В начале есть строка "qwerty". String в PHP - это фактически массив, каждый элемент которого занимает 1 байт, причем каждый элемент пронумерован. Самый обычный числовой массив (не потому, что каждый элемент занимает 1 байт, а потому что он всегда пронумерован). Потом Вы обращаетесь к строке, как к массиву. $mat_h4_1 - строка, а string - числовой массив.
PHP приводит $mat_h4_1 к integer и получает 0. 0 - это "q" в Вашем числовом массиве.
Потом при попытке "впихнуть" в ячейку "AB" (2 байта), вмещающую только 1 байт, "впихивается" только "A".
И получается "Awerty".

   
 
 автор: Киналь   (21.12.2007 в 15:11)   письмо автору
 
   для: Unkind   (21.12.2007 в 15:01)
 

Ах вот оно что! Хех, надо было все-таки учить С++, не забыл бы про типы)

А что можно тут сделать? Попробовал кавычки ставить - не помогло(

   
 
 автор: Unkind   (21.12.2007 в 15:15)   письмо автору
 
   для: Киналь   (21.12.2007 в 15:11)
 

А что Вам нужно? Я, если честно, так и не понял.

   
 
 автор: CrazyAngel   (21.12.2007 в 15:20)   письмо автору
 
   для: Киналь   (21.12.2007 в 15:11)
 


<?php

function pre($array)
{
 echo 
"<pre>";
 
print_r($array);
 echo 
"</pre>";
}


$mat_h1_1 'этикет1';
$mat_h2_1 'этикет2';
$mat_h3_1 'этикет3';
$mat_h4_1 'этикет4';


$arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] = 'qwerty';
$arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] = array($mat_h4_1 => "AB");
pre($arr);

?> 

как нить так :)

   
 
 автор: Киналь   (21.12.2007 в 15:31)   письмо автору
 
   для: Киналь   (21.12.2007 в 14:25)
 

Большое всем спасибо!Помогло приведение типов:

$arr[$mat_h1_1][$mat_h2_1][$mat_h3_1] = array_merge($arr[$mat_h1_1][$mat_h2_1][$mat_h3_1], array());

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования