powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - размерность массива, заполнение массива
22 сообщений из 22, страница 1 из 1
PHP - размерность массива, заполнение массива
    #37956951
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, плиз, как в ПХП:
1. Узнать размерность массива. Имеется ввиду: одномерный, двумерный, трехмерный,...
2. Есть ли способ создания/заполнения многомерного массива одним значением, кроме как использования циклов for/foreach:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for ($p=1; $p<=$kol_p; $p++)
{
	for ($d=1; $d<=$kol_d; $d++)
	{
		for ($c=1; $c<=$kol_c; $c++)
		{
			$cells[$p][$d][$c]=-1;
		}
	}
}
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37956962
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000,

1.
- http://stackoverflow.com/a/145348
- http://www.php.net/manual/ru/function.count.php#84482
2.
Код: php
1.
print_r(array_fill(0, 2, array_fill(0, 2, array_fill(0, 2, 3)))); // Так?
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37956995
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,
1. Понятно, то бишь - ручками
2. На array_fill смотрел. В принципе, то же самое что и с for - повторять столько раз сколько размерность массива. Только с for, имхо, понагляднее будет
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37957017
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
3.
Имеем 3-х мерный массив
$m[0][0][0]=1;
$m[0][0][1]=2;
почему count($m) дает 1, а count($m,COUNT_RECURSIVE) дает 4?
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37957033
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar30003.
Имеем 3-х мерный массив
$m[0][0][0]=1;
$m[0][0][1]=2;
почему count($m) дает 1, а count($m,COUNT_RECURSIVE) дает 4?
а почему должно быть иначе?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Array(
    [0] => Array ( // count($m)
            [0] => Array (
                    [0] => 1
                    [1] => 2
                )
        )
)


а count($m,COUNT_RECURSIVE) даст размер учитывая все вложенные подмассивы
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37958373
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000Usman,
2. На array_fill смотрел. В принципе, то же самое что и с for - повторять столько раз сколько размерность массива. Только с for, имхо, понагляднее будет
для такого придумана рекурсия функция с циклом да и все. Но могут возникнуть проблемы, если в каком то вложенном массиве будет ссылка на родителя
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37958416
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000Только с for, имхо, понагляднее будет
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function ndarray($n, $v) { // без рекурсии
	$a = array_fill(0, $n, $v);
	for ($i = 0; $i < $n - 1; $i++)
		$a = array_fill(0, $n, $a);
	
	return $a;
}

print_r(ndarray(3, 0));
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37969318
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r uа почему должно быть иначе?
Ожидаемый результат должен быть 2.
Видимо, все функции обработки массивов в php не понимают многомерные массивы.

r uа count($m,COUNT_RECURSIVE) даст размер учитывая все вложенные подмассивы
Имхо, count возвращает не размер, а число элементов массива.
Ассоциативность массивов в пхп, с одной стороны, неплохая вещь, но с другой размерность массива сливается с его элементами.
Как-то нехорошо, имея матрицу 2х2, получать число ее элементов 6.
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37969395
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000Ожидаемый результат должен быть 2
ожидаемый только вами.
я же специально показал вам представление описанного вами массива
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$m[0][0][0]=1;
$m[0][0][1]=2;

Array(
    [0] => Array ( // 1. первый элемент содержит в себе массив
            [0] => Array ( // 2. внутри него тоже массив
                    [0] => 1 // 3. первый элемент массива
                    [1] => 2 // 4. второй элемент массива
                )
        )
)


итого. внешний массив содержит в себе только ОДИН элемент-массив
ВСЕГО вложенных элементов 4.
все это вам функция count() и посчитала. все логично.

dar3000Имхо, count возвращает не размер, а число элементов массива.
размер массива - это и есть кол-во элементов.

dar3000Как-то нехорошо, имея матрицу 2х2, получать число ее элементов 6.
COUNT_RECURSIVE флаг делает ровно то что должен, а не то что вы от него хотите.

а вы хотите чтото такое, как я понял
Код: php
1.
2.
3.
4.
5.
6.
function array_size($a, $fl=true) {
	static $cnt=0;
	if ($fl) $cnt=0;
	is_array($a) ? array_map(__FUNCTION__, $a, array() ) : ++$cnt;
	return $cnt;
}
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37973816
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r uя же специально показал вам представление описанного вами массива
Я это понял


r uразмер массива - это и есть кол-во элементов.
А вот с этим трудно согласиться. Возможно, надо было вместо слова размер использовать слово размерность. Имхо, это очевидно. Зря сократил. Для меня размерность массива это не то же самое что и количество элементов. Возьмем одномерный массив - вектор, состоящий из 10 чисел. Разве вы будете прибавлять к числу элементов размерность массива? Т.е. вместо ожидаемого числа 10, вы получаете 11? Разве так? Ведь и я не зря привел пример матрицы 2х2=4, тогда как COUNT_RECURSIVE выдает 6. Чем одно измерение отличается от другого? "Тут читаем, а тут не читаем..."
То что многомерные массивы в пхп представляют из себя массивы массивов, не дает оснований валить в кучу размерность и количество элементов и считать 2х2=6.
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37973831
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
dar3000, в php НЕТ многомерных массивов.
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37973864
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000Для меня размерность массива это не то же самое что и количество элементов. Возьмем одномерный массив - вектор, состоящий из 10 чисел. Разве вы будете прибавлять к числу элементов размерность массива? Т.е. вместо ожидаемого числа 10 , вы получаете 11? Разве так? Ведь и я не зря привел пример матрицы 2х2=4 , тогда как COUNT_RECURSIVE выдает 6.

я так и думал.
вы путаетесь в терминологии.
и вообще живете в каком-то ВАШЕМ мире, в котором размерность массива 2х2=4, а размерность одномерного 10.
WIKIРазмерность массива — количество индексов, которые необходимо задать одновременно для доступа к элементу массива.

например в НАШЕМ мире, размерность массива 2х2 всегда была равна 2.
а плоский массив из 10 чисел - имеет размерность 1.

так вот. вы сначала разберитесь в теории того что вы хотите. а то мы тут вам пытаемся помоч в решении одного, а вы оказывается ожидаете совсем другого )
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979531
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,
я, однако, нигде не утверждал, что матрица 2х2 имеет размерность отличную от двух. Всего лишь, что количество элементов такой матрицы равно 4.
В то время как функция пхп count выдает 6 элементов.
Что здесь непонятного?
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979537
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

добавлю расшифровку записи о матрице 2х2=4, боюсь опять не поймете, хотя тут все элементарно:
2 - это размерность матрицы (массива)
2х2 - это число элементов в строках/столбцах
4 - это итоговое число элементов матрицы (2 элемента строки + 2 элемента столбца = итого 4 элемента)
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979539
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
dar3000, count выдает не размер матрицы, потому что в PHP вообще нет матриц. Что здесь непонятного?
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979553
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?dar3000, count выдает не размер матрицы, потому что в PHP вообще нет матриц. Что здесь непонятного?
это мне понятно уже давно. Пожалуйста, читайте внимательнее:
dar3000...Имхо, count возвращает не размер, а число элементов массива....

Мне непонятно, зачем мешать в кучу элементы и размерность, что фактически делает count с опцией COUNT_RECURSIVE?
Для куба (3-х мерный массив) число элементов равно 27 (3х3х3=27) А что выдает count?
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979556
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первому вопросу навскидку
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    $m[0][0][0]=1;
    $m[0][0][1]=2;
    $m[0][0][2]=2;
    $m[0][0][3]=2;

    function array_place($array) {
        function __array_place($array, $count = -1) {
            if (list($block) = $array) return __array_place($block, ++$count); else return $count;
        }
        return __array_place($array);
    }
    
    echo array_place($m); //3
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979584
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?dar3000, в php НЕТ многомерных массивов.
Тоже стал склоняться к такому выводу.
Хотя, почему пытался что-то сказать: http://www.php.su/learnphp/datatypes/?array тут говориться что есть многовмерные массивы, а также простые и ассоциативные. Но на поверку получается, что все массивы в пхп ассоциативные.
По этой ссылке приведен пример простого многомерного массива:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
$arr[0][0]="Овощи";
$arr[0][1]="Фрукты";
$arr[1][0]="Абрикос";
$arr[1][1]="Апельсин";
$arr[1][2]="Банан";
$arr[2][0]="Огурец";
$arr[2][1]="Помидор";
$arr[2][2]="Тыква";


как видим число элементов 8
count($arr,COUNT_RECURSIVE) дает 11. Тогда либо массив не простой, либо он не многомерный (о чем говорили выше), а ассоциативный, просто ассоциативность носит неявный характер. А то говорим одно, а получаем иное
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979594
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
dar3000, вы с C++ знакомы?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// это двумерный массив
char a[2][2]; 

// а это - не двумерный массив
const char *b[2] = {"ab","cd"};

for (int i=0;i<2;++i)
  for (int j=0;j<2;++j)
     // хотя обращение к элементам выглядит одинаково
     a[i][j] = b[i][j]; 

если к элементам некоего объекта можно обращаться с помощью пары индексов, это еще не значит, что этот объект - двумерный массив.
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979634
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dar3000,

вам уже неоднократно сказали что:
- в пхп НЕТ МНОГОМЕРНЫХ МАССИВОВ И МАТРИЦ!!!!
- count($arr,COUNT_RECURSIVE) считае кол-во ВСЕХ элементов массива и подмассивов

Выводы:
- count($arr,COUNT_RECURSIVE) - вам НЕ ПОМОЖЕТ!
- давно бы написали свою функцию и не парили мозг себе и людям
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979639
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
r uа вы хотите чтото такое, как я понял
Код: php
1.
2.
3.
4.
5.
6.
function array_size($a, $fl=true) {
	static $cnt=0;
	if ($fl) $cnt=0;
	is_array($a) ? array_map(__FUNCTION__, $a, array() ) : ++$cnt;
	return $cnt;
}


другой вариант
Код: php
1.
2.
3.
4.
5.
6.
function array_size(array $m) {
 $i = new RecursiveIteratorIterator(new RecursiveArrayIterator($m));
 $cnt=0;
 foreach($i as $c) ++$cnt;
 return $cnt;
}
...
Рейтинг: 0 / 0
PHP - размерность массива, заполнение массива
    #37979682
dar3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r udar3000,
- count($arr,COUNT_RECURSIVE) - вам НЕ ПОМОЖЕТ!
- давно бы написали свою функцию и не парили мозг себе и людям

А разве я просил написать функцию? Извините, но мозг я себе не парю. И разве моя вина, что вы порой неверно понимаете смысл сказанного мною и отправляете учить некую теорию, как например, на вышеуказанной ссылке, где прямо говориться, что в пхп есть многомерные массивы.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - размерность массива, заполнение массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]