отобразить массив, который соответствует только этому условию, в php - PullRequest
0 голосов
/ 01 марта 2020

У меня есть многомерный массив, и я циклично внутри него, чтобы получить подмассивы: поэтому у меня есть подмассив l ie this:

array (
  0 => 
  array (
    'norm_value' => 2.5,
  ),
  1 => 
  array (
    'norm_value' => 7.01,
  ),
  2 => 
  array (
    'norm_value' => 0.0,
  ),
  3 => 
  array (
    'norm_value' => 4.167,
  ),
  4 => 
  array (
    'norm_value' => 0.0,
  ),
)

array (
  0 => 
  array (
    'norm_value' => 0.0,
  ),
  1 => 
  array (
    'norm_value' => 0.0,
  ),
  2 => 
  array (
    'norm_value' => 0.0,
  ),
  3 => 
  array (
    'norm_value' => 1.267,
  ),
  4 => 
  array (
    'norm_value' => 0.0,
  ),
)

array (
  0 => 
  array (
    'norm_value' => 0.0,
  ),
  1 => 
  array (
    'norm_value' => 0.0,
  ),
  2 => 
  array (
    'norm_value' => 0.0,
  ),
  3 => 
  array (
    'norm_value' => 0.0,
  ),
  4 => 
  array (
    'norm_value' => 0.0,
  ),
)

array (
  0 => 
  array (
    'norm_value' => 3.54,
  ),
  1 => 
  array (
    'norm_value' => 2.04,
  ),
  2 => 
  array (
    'norm_value' => 0.673,
  ),
  3 => 
  array (
    'norm_value' => 8.546,
  ),
  4 => 
  array (
    'norm_value' => 0.0,
  ),
)

Итак, из приведенного выше набора массивов, я хочу удалить полный массив, который имеет по крайней мере одно ненулевое значение или все нулевые значения, из приведенного выше случая я хочу удалить полный второй массив (он имеет только одно ненулевое значение) и третий массив (это имеет все нулевые значения) ), остальные два (первый и последний) массива должны отображаться как есть.

я пробовал этот код p ie, но у меня не сработало:

array_filter(array_column($array, 'norm_value'),function($n){
    return ( count ($n > 0) <= 1) ;
});

пожалуйста, дайте мне знать, если я что-то здесь упускаю или какие-либо синтаксические проблемы, чтобы решить эту проблему Спасибо заранее.

1 Ответ

0 голосов
/ 02 марта 2020

Мы бы l oop по каждому подмассиву и посчитали, сколько norm_value имеет 0.0. Если счетчик соответствует size или size-1, то мы сбрасываем этот индекс.

$epsilon = 0.00001;

foreach($arr as $index => $subarray){
    $count = 0;
    foreach($subarray as $norm_data){
        if(abs($norm_data['norm_value'] - 0.0) < $epsilon) $count++;
    }

    if($count === count($subarray) || $count == count($subarray)-1){
        unset($arr[$index]);
    }
}

print_r($arr);

Демонстрация: https://3v4l.org/futQ8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...