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

Форум PHP

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

 

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

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

тема: Выбрать срез многомерного массива
 
 автор: TetRiska   (29.07.2012 в 21:11)   письмо автору
 
 

Всем привет! Есть такая ф-ция array_slice с одномерным массивом понятно как работать, а как с многомерным, не совсем понятно. Вот мой многомерный массив, от него нужно отрезать с 0 по 9 позицию, или с 5 по 13, в общем чтоб можно было регулировать.

Array
(
    [count] => 41
    [result] => Array
        (
            [em_newart_id] => Array
                (
                    [0] => 3373
                    [1] => 3557
                    [2] => 3634
                    [3] => 3346
                    [4] => 3624
                    [5] => 3337
                    [6] => 3317
                    [7] => 3386
                    [8] => 3290
                    [9] => 3360
                    [10] => 3426
                    [11] => 3294
                    [12] => 3303
                    [13] => 3370
                    [14] => 3436
                    [15] => 3484
                    [16] => 3427
                    [17] => 3630
                    [18] => 3342
                    [19] => 3351
                    [20] => 3463
                    [21] => 3454
                    [22] => 3433
                    [23] => 3523
                    [24] => 3353
                    [25] => 3311
                    [26] => 3461
                    [27] => 3521
                    [28] => 3514
                    [29] => 3507
                    [30] => 3349
                    [31] => 3183
                    [32] => 3369
                    [33] => 3571
                    [34] => 3431
                    [35] => 3469
                    [36] => 3493
                    [37] => 3459
                    [38] => 3390
                    [39] => 3293
                    [40] => 3508
                )
        )
)

После среза допустим с 0 по 3 должно быть так:

Array
(
    [count] => 3
    [result] => Array
        (
            [em_newart_id] => Array
                (
                    [0] => 3373
                    [1] => 3557
                    [2] => 3634
                )
        )
)

  Ответить  
 
 автор: confirm   (29.07.2012 в 21:32)   письмо автору
 
   для: TetRiska   (29.07.2012 в 21:11)
 

Ну и как может функция интерпретировать ваши аргументы, понимая, чего вы у нее просите? Так не получится, не перебрав массива. Из последнего вложенного массива, вы можете получить только так, например:
<?
echo '<pre>';
$a = array(
  
'count' => 41
  
'result'=> array( 
            
'em_newart_id' => array( 
                    
3373,3557,3634,3346
                    
3624,3337,3317,3386)
                   ) 
);
print_r(array_slice(current(end($a)),0,3));

  Ответить  
 
 автор: TetRiska   (29.07.2012 в 21:43)   письмо автору
 
   для: confirm   (29.07.2012 в 21:32)
 

не совсем то

Array
(
    [0] => 3370
    [1] => 3463
    [2] => 3337
)


мне нужно получить такой же массив многомерный, только с уменьшенным кол. элементов в интервале что я укажу

  Ответить  
 
 автор: confirm   (29.07.2012 в 21:48)   письмо автору
 
   для: TetRiska   (29.07.2012 в 21:43)
 

А разве я написал, что это решение вашей задачи? Я написал, что так как вы хотите - прописал размер как 0, 3, а дура функция пусть разбирается чего вы от нее хотите, не получится. И чтобы понять, что вы от нее хотите нечто и от последнего вложения, то не указывая ключа, к нему можно обратиться так, как я и привел в примере. Если у вас массив сложный, и то, что вы привели, это всего лишь часть его, то без обхода такого массива не обойтись.

  Ответить  
 
 автор: TetRiska   (29.07.2012 в 21:52)   письмо автору
 
   для: confirm   (29.07.2012 в 21:48)
 

обратится к нему можно было и проще, результат таков же:
print_r(array_slice($a['result']['em_newart_id'],0,3));

буду пробовать обход через foreach

  Ответить  
 
 автор: confirm   (29.07.2012 в 21:59)   письмо автору
 
   для: TetRiska   (29.07.2012 в 21:52)
 

Ну вы же читайте о чем я пишу. Откуда мне знать, что вы работаете с кусочком? А если нет, и вы не знаете ключей? Вы либо опишите все от а до я, что это такой массив, и более ничего, тогда можно и ключами оперировать.
Если это все, что и есть, то что вам мешает ваши операнды интерпретировать перед передачей в функцию так, как вы этого желаете? Если 0, 3, это закономерность, и в 0, 7, такая же закономерность, то разве сложно из всего этого получить операнды для двух функций array_slice(), и обойтись без цикла?

  Ответить  
 
 автор: TetRiska   (30.07.2012 в 18:58)   письмо автору
 
   для: confirm   (29.07.2012 в 21:59)
 

вот все решение задачи
$mass2['count'] = 3; 
$mass2['result']['em_newart_id'] = array_slice($mass2['result']['em_newart_id'],0,3);

но, все равно спасибо

  Ответить  
 
 автор: confirm   (30.07.2012 в 19:22)   письмо автору
 
   для: TetRiska   (30.07.2012 в 18:58)
 

Задавая задачи, описывайте данные и условия, а то оказывается, в последствии, что вопроса как такового и нет, то есть проблемы.

  Ответить  
Rambler's Top100
вверх

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