我有三个不同的数组,有些可能包含数据,有些则不包含数据。每个数组都可以包含未知数量的数据。所以首先我要检查每个数组中的数据量,然后创建另一个名为'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('','','')
,我想删除它。
答案 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_map
和array_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);