【发布时间】:2012-03-08 06:27:03
【问题描述】:
如果 k/v 对位于可预测的位置,则可以使用 array_slice 解决此问题, 不幸的是,它们随机分散在整个阵列中,我必须 创建我自己的愚蠢的小方法来重新分配事物。不幸的是,我这里的 while 循环并没有取消蹲下....有(当然有)更好的方法,或者纠正这种行为的方法吗?
重新分配和将密钥列入黑名单的循环。
$reports = array(
'inspection_number' =>"{$array['report_key']}",
'customer_number' =>"{$array['customer_number']}",
'customer_division' =>"{$array['customer_division']}",
'report_date' =>"{$array['report_date']}",
'customer' =>"{$array['customer']}",
'location' =>"{$array['location']}",
'region' =>"{$array['region']}",
);
while (list($k, $v) = each($reports)) {
if($array[$k]) { unset($array[$k], $array[$v]); }
}
数组,你可以看到 $array 里面仍然有 $reports 键。
array (
'shipper' => '',
'status' => '',
'po' => '',
'location' => '',
'inspector' => '',
'commodity' => '',
'count' => '',
'size' => '',
'label' => '',
'variety' => '',
'pack_date' => '',
'comments' => '',
'report_key' => '',
'region' => '',
'type' => 'melons',
'report_date' => '1969-12-31',
'customer_number' => '',
'customer' => '',
'customer_division' => '',
'staged' => 'true',
)array (
'`inspection_number`' => '\'\'',
'`customer_number`' => '\'\'',
'`customer_division`' => '\'\'',
'`report_date`' => '\'1969-12-31\'',
'`customer`' => '\'\'',
'`location`' => '\'\'',
'`region`' => '\'\'',
)
编辑
如您所见,第二个数组仍然包含第一个数组中的键, 这些并没有被取消。即使我像这样进行多重递归循环
foreach($reports as $reportsKey => $reportsValue) {
foreach($array as $arrayKey => &$arrayValue) {
if($reportsKey == $arrayKey) { unset($arrayKey); }
} }
我正在尝试分配$reports 中的键,$array 中的键/值,
然后从$array 取消设置复制的密钥。这可以通过array_slice() 完成
如果$array 中键的位置是可预测的,但不幸的是它们
不是。
奇怪的是,即使尝试分配 $reports 中不存在的键也不起作用
$tmp = array();
foreach($array as $ak => $av) {
// if $reports['key_name'] does not exist, assign it to a new array.
if(!$reports[$ak]) { $tmp[$ak] = $av; }
}
【问题讨论】:
-
没有得到你需要的东西,你的问题是什么
-
reports 数组键是否真的包含反引号?啊!
-
反引号是临时为数据库插入做准备的
标签: php multidimensional-array while-loop unset