繁体   English   中英

从PHP数组中提取特定类型的元素

[英]Extract elements of certain type from an array in PHP

我有一个从Excel文件中获取的多维数组(从单元格中删除了所有格式,样式信息等的原始数据)。 数组示例:

array(1) {
  [0]=>
  array(4) {
    [1]=>
    array(1) {
      ["A"]=>
      string(5) "aaaaa"
    }
    [2]=>
    array(1) {
      ["A"]=>
      NULL
    }
    [3]=>
    array(1) {
      ["A"]=>
      NULL
    }
    [4]=>
    array(1) {
      ["A"]=>
      float(666)
    }
  }
} 

字符串型单元格表示输入到工作表单元格中的普通文本,而浮点型单元格表示在此输入的数字。

有什么方法可以从这样的数组中提取“字符串”和“浮点数”吗? 或者,是否可以至少按数组的元素类型从数组中删除所有信息/过滤掉其他信息,只在其中保留“字符串”和“浮动”元素?

谢谢!

只需递归检查数组项,然后删除不是字符串,浮点数或包含数据的数组的项。

代码示例:

<?php
$data = [
    [
        ['A' => 'aaaaa'],
        ['A' => null],
        ['A' => null],
        ['A' => (float)666]
    ]
];

function filterData($array)
{
    foreach ($array as $key => &$value) {
        if (is_array($value))
            $value = filterData($value);

        if ($value === [] || (!is_array($value) && !is_string($value) && !is_float($value)))
            unset($array[$key]);
    }

    return $array;
}
var_dump(filterData($data));

/* result
array(1) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["A"]=>
      string(5) "aaaaa"
    }
    [3]=>
    array(1) {
      ["A"]=>
      float(666)
    }
  }
}
*/

或者,您可以结合使用array_maparray_filter,并在array_filter的回调中检查值是浮点数还是字符串:

$arrays = [
    [
        ['A' => 'aaaaa'],
        ['A' => null],
        ['A' => null],
        ['A' => (float)666]
    ]
];

$arrays = array_map(function($x) {
    return array_filter($x, function($y) {
        return is_float($y['A']) || is_string($y['A']);
    });
}, $arrays);

var_dump($arrays);

演示版

这将导致:

array(1) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["A"]=>
      string(5) "aaaaa"
    }
    [3]=>
    array(1) {
      ["A"]=>
      float(666)
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM