PHP有条件地从数组

时间:2018-06-12 09:22:04

标签: php arrays performance filter slice

我是PHP的新手。我需要过滤服务器的响应,以提高性能。我有一个由管道char分割的有效负载,并切片以仅检索我需要的数据:

$alllogsplitted = explode("|",$row['PAYLOAD']); 
print_r(array_slice($alllogsplitted, 23, 22));

每个位置的数据都具有相同的结构,例如:A1;0;0表示:type;firstvalue;secondvalue。现在我想只得到firstvalue与零不同的数据。实际的回应是:

  Array
  (
      [0] => A1;0;0
      [1] => A2;0;0
      [2] => A3;0;0 
      [3] => A4;0;0
      [4] => A5;0;1593720
      [5] => A6;0;0
      [6] => A7;0;29
      [7] => A8;3;0 // this data is to retrieve
      [8] => A9;0;0
      [9] => A13;0;0
      [10] => A14;0;0
      [11] => A23;1;33802 // this data is to retrieve
      [12] => A25;0;2706254
      [13] => A27;0;100
      [14] => A30;0;0
      [15] => A31;0;100785
      [16] => A32;0;0
      [17] => A33;0;0
      [18] => A34;0;0
      [19] => A47;0;128694
      [20] => A48;0;2
      [21] => B1;0;145
  )
  Array
  (
      [0] => A1;0;0
      [1] => A2;0;0
      [2] => A3;0;0
      [3] => A4;0;0
      [4] => A5;0;1593688
      [5] => A6;0;0
      [6] => A7;0;29
      [7] => A8;3;0 // this data is to retrieve
      [8] => A9;0;0
      [9] => A13;0;0
      [10] => A14;0;0
      [11] => A23;0;33802
      [12] => A25;0;2706254
      [13] => A27;0;100
      [14] => A30;0;0
      [15] => A31;0;100785
      [16] => A32;0;0
      [17] => A33;0;0
      [18] => A34;0;0
      [19] => A47;0;128694
      [20] => A48;0;2
      [21] => B1;0;145
  )
  Array
  (
      [0] => A1;0;0
      [1] => A2;0;0
      [2] => A3;2;1 // this data is to retrieve
      [3] => A4;0;0
      [4] => A5;0;1593688
      [5] => A6;0;0
      [6] => A7;0;26
      [7] => A8;0;981
      [8] => A9;0;0
      [9] => A13;0;0
      [10] => A14;0;0
      [11] => A23;0;33802
      [12] => A25;0;2706254
      [13] => A26;0;3
      [14] => A27;0;100
      [15] => A30;0;0
      [16] => A31;0;100785
      [17] => A32;0;0
      [18] => A33;0;1
      [19] => A34;0;0
      [20] => A47;0;128694
      [21] => A48;0;2
  )

而我想要这个回应:

  Array
  (
      [7] => A8;3;0 // this data is to retrieve
      [11] => A23;1;33802 // this data is to retrieve
  )
  Array
  (
      [7] => A8;3;0 // this data is to retrieve
  )
  Array
  (
      [2] => A3;2;1 // this data is to retrieve
  )

我怎么能得到这个?谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助:$ array是您要过滤的数组

foreach ($array as $key => $value) {
    $columns = explode(';', $value);
    if($columns[1] != 0) {
        $columns = implode(';', $columns);
        $result[$key] = $columns;
    }
}

答案 1 :(得分:1)

这个功能应该适合你。它遍历数组,仅根据您指定的条件保留实例

function filterArrayForResult($array) {
    $newArray = array_filter($array, function($string) {
        $stringArray = explode(';', $string); // Creates an array from the string

        return ($stringArray[1] != 0); // Only keep the elements that equals true
    });

    return $newArray // Return the result
}