Блог


Функции обработки массивов

Раздел функций для работы с массивами в PHP наверное самый большой. Но и там есть пробелы. Вот несколько функций, которые часто бывают необходимы.

 

Как освободить массив от пустых значений. Есть несколько способов: перебор в цикле, применение фильтра или такие конструкции:

1
 2
 3
 4


    $array 
array_diff($array, array(''));

Но у всех есть свои недостатки. Первое - излишняя громоздкость. Но это решается таким же помещением в обертку. А второе и третье - проблема. Эти конструкции оставляют прежними ключи массива, а иногда их нужно упорядочить. И еще, проблема с приведением типов. Как нам нужно воспринимать ноль, как цифру, или как пустоту? В нашей функции эти моменты учтены. Кроме того, она очищает любые массивы, ассоциативные и многомерные. Как она устроена, рассказывать не буду, есть код, кому нужно, сами разберетесь.  

 

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

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
<?php


// Исключить нулевые значения
    
define('IRB_NO_ZERO',       1); 
// Упорядочить ключи    
    
define('IRB_ORDER',         2);

/////////////////////////////////////////
// Испытуемый мссив
    
$array = array('key' => 'value',
                            
0,
                            
1,
                            
2
                            
''
                            array(
''034''
                                  array(
''56'')
                            )
         );

// По умолчанию убираем пустые значения,
// оставляя прежним порядок ключей 
    
var_dump(arrayEmptyFilter($array));    
// Убираем пустые значения и нули   
    
var_dump(arrayEmptyFilter($arrayIRB_NO_ZERO));     
// Убираем пустые значения, упорядочивая ключи   
    
var_dump(arrayEmptyFilter($arrayIRB_ORDER)); 
// Убираем пустые значения и нули, упорядычивя ключи     
    
var_dump(arrayEmptyFilter($arrayIRB_ORDER IRB_NO_ZERO)); 


///////////////////////////////////////////////
// Функция
    
    
function arrayEmptyFilter($array$option 0)
    {
        static 
$opt$filter
        
        if(
$opt !== $option)
        { 
            
$opt    $option;
            
$filter create_function('$a'
                      
'return (bool)($a'
                      
. (($opt == || $opt == 2) ?  
                      
' || $a === 0' '') .');'
                      
);
        }
     
        foreach(
$array as $k => &$val)
            if(
is_array($val))
                
$val arrayEmptyFilter($val$opt);
      
        
$array array_filter($array$filter);
        
        if(
$opt 1)
            
$array array_merge($array);
        
        return 
$array;
    }

 

Еще бывает нужно поменять местами элементы. Очень простенькая, но весьма полезная функция:

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
<?php


    $array 
= array(1,2,3,4,5); 
    
var_dump($array);
// Поменяем местами первый и последний элементы
// Нумерация элементов массива начинается с нуля
    
$array arrayChange($array04);
    
var_dump($array);

/////////////////////////////////////////////
// Функция

    
function arrayChange($a$v1$v2)
    {
        list(
$a[$v2], $a[$v1]) = array($a[$v1], $a[$v2]);
        return 
$a;
    }

 

Продолжение следует

Теги: PHP

Комментарии (1)

pamparam
27-03-2013
спс
тут немного посложней для восприятия,
буду грысть

 
Наверх