Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过字母键清理php数组_Php_Arrays - Fatal编程技术网

通过字母键清理php数组

通过字母键清理php数组,php,arrays,Php,Arrays,我从一个xls文档中提取数据,该文档以数组形式返回。但是,数组键不是数字,而是类似于单元格列字母数字。所以实际上我有这样一个数组: // Example array: $array = array( [0] => array( "A" => "Name", "B" => "Surname", "C" => "", "D" => "T

我从一个xls文档中提取数据,该文档以数组形式返回。但是,数组键不是数字,而是类似于单元格列字母数字。所以实际上我有这样一个数组:

  // Example array:
  $array = array(
        [0] => array(
              "A" => "Name",
              "B" => "Surname",
              "C" => "",
              "D" => "Telephone"
        ),
        [1] => array(
              "A" => "Name",
              "B" => "Surname",
              "C" => "",
              "D" => "Telephone"
        ),
        [2] => array(
              "A" => "",
              "B" => "",
              "C" => "",
              "D" => ""
        )
  );
现在返回的数组的问题是它根本不过滤数组,并且我可能在行中有一行又一行的空值

我需要一种方法来彻底清理数组,以便删除空行和空位,但这可能会给我以后的数组一致性带来一些问题

我要找的是一个函数,它可以将数组中的行按数字切分。因此,实际上类似于array_chop($array,“$C”);这将从D开始有效地取消设置所有剩余行的键和值对

这是可能的吗?是否有一个php函数我已经可以使用?我很抱歉,我不能提供示例代码,但我不知道从哪里开始。数组是相当大的,所以我正在寻找一个内存高效的解决方案


提前谢谢!

如果您只想复制专栏的一小部分,这必须是高效的:

<?php
$array = array(
      0 => array(
            "A" => "Name",
            "B" => "Surname",
            "C" => "",
            "D" => "Telephone"
            ),
      1 => array(
            "A" => "Name",
            "B" => "Surname",
            "C" => "",
            "D" => "Telephone"
            ),
      2 => array(
            "A" => "",
            "B" => "",
            "C" => "",
            "D" => ""
            )
      );

$last_column = 1;

$n = count($array);
for ($i = 0; $i < $n; ++$i)
{
      $copy = array();
      $j = 0;
      foreach($array[$i] as $key => $value)
      {
            if ($j <= $last_column)
            {
                  $copy[$key] = $value;
                 ++$j;
            }
            else
            {
                  $array[$i] = $copy;
                  break;
            }
      }
}

var_dump($array);

普通的老式
foreach
是你需要的zerkms,我担心这是唯一的方法。问题是数组大约有6000行,所以foreach需要永远的时间。为什么你要在D仍然包含电话的时候切掉C?@Mauritz Swanepoel:“大约6000行,所以foreach需要永远的时间。”“---真正的程序员和算命师的区别在于,第一个是用事实来操作的。那么让我开始工作吧。”
array(3) {
  [0]=>
  array(2) {
    ["A"]=>
    string(4) "Name"
    ["B"]=>
    string(7) "Surname"
  }
  [1]=>
  array(2) {
    ["A"]=>
    string(4) "Name"
    ["B"]=>
    string(7) "Surname"
  }
  [2]=>
  array(2) {
    ["A"]=>
    string(0) ""
    ["B"]=>
    string(0) ""
  }
}