使用未知数据量的不同数组创建数组并过滤空白数据数组

时间:2018-02-12 09:55:51

标签: php arrays

我有三个不同的数组,有些可能包含数据,有些则不包含数据。每个数组都可以包含未知数量的数据。所以首先我要检查每个数组中的数据量,然后创建另一个名为'profession'的数组,第一个值为三个数组,第二个值为三个数组,依此类推。如果某些字段在三个字段中都包含空值,我想过滤它。

这是我的代码,无法弄清楚我错在哪里。

 <?php

$org= array('', 10,11);
$suborg = array(11,12,13);
$desg = array('','',7);
$data = array();
if (is_array($org)) {
        $i = 0;
        foreach ($org as $key) {
        $data['orgs'][$i] = $key;
        $i++;
 }
    if (is_array($suborg)) {
        $i = 0;
        foreach ($suborg as $key) {
            $data['sorg'][$i] = $key;
            $i++;
        }
    }
    if (is_array($desg)) {
        $i = 0;
        foreach ($desg as $key) {
            $data['desg'][$i] = $key;
            $i++;
        }
    }

    foreach ($data as $row => $value){
        $i = 0;
        $profession = array();
        $profession['fld_org_id'] = (isset($value[$i]) ? $value[$i] : '');
        $profession['fld_suborg_id'] =  (isset($value[$i]) ? $value[$i] : '');
        $profession['fld_desg_id'] = (isset($value[$i]) ? $value[$i] : '');
        var_dump($profession);
        echo "<br>";
        if($profession['fld_org_id'] != '' || $profession['fld_suborg_id'] != '' ||  $profession['fld_desg_id'] != '') {

            echo 'Profession Inserted';
        }
        $i++;
    }
    echo "<br>";
    var_dump($data);
}

其实我想要像

这样的结果
$profession('','11','');
$profession('10','12','');
$profession('11','13','7');

如果$profession('','',''),我想删除它。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你想基本上进入圆柱存储。与$org$suborg$desg中的值数量无关?如果是这样,你必须根据引用数组的值的数量进行循环(我没有实现检查哪个数组具有最多值的函数,我只使用$org作为参考)。

为了实现这一点,您必须首先记住要从子数组中获取的值的数量,然后循环遍历数据数组。我还使用$ row(键名)来构建具有相应值的新fld_org_id(和等于)键。

<?php
//Added two more values in each array, including one that should not be kept (the last one)
$org= array('', 10,11, 1, '');
$suborg = array(11,12,13, 1, '');
$desg = array('','',7, 1, ''); 
$data = array();
if (is_array($org) && is_array($suborg) && is_array($desg)) {
    $data['org'] = $org;
    $data['sorg'] = $suborg;
    $data['desg'] = $desg;
    $numberOfColumns = count($data['org']);
    for($i = 0; $i < $numberOfColumns; $i++){
        $profession = array();
        //Loop through data-array.
        foreach ($data as $row => $value){
           $profession['fld_'.$row.'_id'] = (isset($value[$i]) ? $value[$i] : '');
        }
        //If one of all values in array, do whatever you want to keep it
        if(count(array_filter($profession, function($v){ return $v != ""; })) > 0){
           echo "Keeping this<br/>";
        }else{
           echo "NOT keeping this<br/>";
        }
        var_dump($profession);
        echo "<br>"; 
    }
}
?>

答案 1 :(得分:0)

您可以使用array_maparray_filter

$data = array_filter(array_map(null,  $desg, $suborg, $org), 'implode');

这是可以实现的,因为有两个array_map属性:

  

通常在使用两个或更多数组时,它们的长度应相等   因为回调函数并行应用于   相应的元素。如果阵列长度不等,则更短   其中将使用空元素进行扩展以匹配长度   最长的。

     

这个函数的一个有趣用途是构造一个数组   数组,可以通过使用NULL作为名称轻松执行   回调函数

这是the demo

答案 2 :(得分:-1)

<?php
$org= array('', 10,11);
$suborg = array(11,12,13);
$desg = array('','',7);
$data = array();

$isVaild = is_array($org) && is_array($suborg) && is_array($desg);

if($isVaild){

    $profession = array(
        'fld_org_id'=>$org,
        'fld_suborg_id'=>$suborg,
        'fld_desg_id'=>$desg,
    );

    $profession = array_filter($profession,function($flds){
        foreach($flds as $fld){
            if($fld !== ''){
                return true;
            }
        }
        return false;
    });

}


print_r($profession);