Удалить строки с пустыми значениями из многомерного массива в php - PullRequest
2 голосов
/ 04 августа 2011

Как удалить строки с пустыми элементами из многомерного массива в PHP?

Например, от:

1: a, b, c, d
2: d, _, b, a
3: a, b, _, _
4: d, c, b, a
5: _, b, c, d
6: d, c, b, a

до

1: a, b, c, d
4: d, c, b, a
6: d, c, b, a

Спасибо!

Ответы [ 5 ]

7 голосов
/ 04 августа 2011
$arr = array(... your multi dimension array here ...);
foreach($arr as $idx => $row) {
    if (preg_grep('/^$/', $row)) {
        unset($arr[$idx]);
    }
}
3 голосов
/ 04 августа 2011

Используйте этот код:

$source = array(
    array('a', 'b', 'c', 'd'),
    array('d', '_', 'b', 'a'),
    array('a', 'b', '_', '_'),
    array('d', 'c', 'b', 'a'),
    array('_', 'b', 'c', 'd'),
    array('d', 'c', 'b', 'a'),
);

$sourceCount = count($source);

for($i=0; $i<$sourceCount; $i++)
{
  if(in_array("_", $source[$i])) unset($source[$i]);
}

См .: http://ideone.com/Vfd6Z

1 голос
/ 04 августа 2011

Попробуйте:

Примечание: $ arr - это ваш массив.

foreach ( $arr as $key => $line ) {

    foreach ( $line as $item ) {

        if ( empty( $item ) ) {

            unset( $arr[$key] );
            break;
        }

    }

}

Приветствия

1 голос
/ 04 августа 2011

Я бы сам повторил цикл foreach примерно так:

<?php
    // Let's call our multidimensional array $md_array for this

    foreach ($md_array as $key => $array)
    {
        $empty_flag = false;

        foreach ($array as $key => $val)
        {
            if ($val == '')
            {
                $empty_flag = true;
            }
        }

        if ($empty_flag == true)
        {
            unset($md_array[$key]);
        }
    }
?>

Почти наверняка есть более эффективный способ сделать это, так что любой, кто имеет лучшее решение, не стесняется сообщить мне и Алексу об этом.

1 голос
/ 04 августа 2011

Переберите многомерный массив и проверьте, содержит ли массив в позиции i пустые элементы.Если это так, позвоните unset($arr[i]), чтобы удалить его.

for($i=0,$size=sizeof($arr); $i < $size; $i++) {
    if( in_array( "", $arr[$i] ) )
        unset( $arr[$i] );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...