我想使用ID的基础从多维数组中删除数组。我尝试使用foreach循环。但是,它没有用。
有人帮我解决了这个问题吗?
感谢。
=>数组:
Array
(
[0] => Array
(
[id] => 11109
[value] => Yes
[field_id] => 234
)
[1] => Array
(
[id] => 11109
[value] => Yes
[field_id] => 237
)
[2] => Array
(
[id] => 11110
[value] => No
[field_id] => 234
)
[3] => Array
(
[id] => 11110
[value] => No
[field_id] => 237
)
[4] => Array
(
[id] => 11111
[value] => No
[field_id] => 237
)
)
从这个数组中,我想删除
的数组因此,从此数组中只显示ID 11111数组,否则将从当前数组中删除所有数组。
这是我的代码使用我试图删除数组。
foreach ($collection->getData() as $key => $value) {
if(($value['field_id'] == $ids[0] && $value['value'] == "No")){
echo $value['id'];
// exit;
break;
}
echo $value['field_id'];
echo $value['value'];
if(($value['field_id'] == $ids[1] && $value['value'] == "No")){
print_r($collection->getData()[$key]);
unset($collection->getData()[$key]);
unset($collection->getData()[$key-1]);
}
}
答案 0 :(得分:0)
函数getData()
是否返回数组或引用的副本?如果只是副本,则unset($collection->getData()[$key])
将无效。
最好像你一样循环遍历数组,但将要删除的所有键存储在另一个数组中(例如$keysToRemove
)。当for-each-loop完成后,你开始循环包含你要删除的所有键的新数组$keysToRemove
,然后从数组中删除。
$keysToRemove = array();
$data = $collection->getData(); // copy or reference?
foreach ($data as $key => $value) {
if(($value['field_id'] == $ids[0] && $value['value'] == "No")){
echo $value['id'].'<br>';
break; // exit the loop? If you want to jump to the next element use "continue"
}
echo $value['field_id'].'<br>';
echo $value['value'].'<br>';
if(($value['field_id'] == $ids[1] && $value['value'] == "No")){
$keysToRemove[$key] = true;
$keysToRemove[$key-1] = true;
}
}
foreach(array_keys($keysToRemove) as $key){
echo '<p>remove key '.$key.' with content <pre>'.print_r($data[$key], true).'</pre></p>';
unset($data[$key]);
}
echo '<p>Result array is<pre>'.print_r($data, true).'</pre></p>';
所以你不要操纵你的循环使用的数组。
答案 1 :(得分:0)
您可以创建一个新的多维数组,并只复制您想要的值。
另外,当你使用break时,你完全退出foreach循环,我不认为这是预期的行为,使用继续跳过当前迭代并测试下一个元素
答案 2 :(得分:0)
基于提及其Magento Collection的评论。我想,你可以过滤集合中的id,这样就不会将它们作为你想要的集合的一部分。像:
$collection = Mage::getModel('your/model')->getCollection();
$collection->addAttributeToFilter('field_id', array('nin' => array(234, 237)));
或者,如果您的模型是非eav实体模型,则跟随
$collection = Mage::getModel('your/model')->getCollection();
$collection->addFieldToFilter('field_id', array('nin' => array(234, 237)));
答案 3 :(得分:0)
尝试使用此代码删除所有值为No
的数组值$cart = array(
0 => array
(
'id' => 11109,
'value' => 'Yes',
'field_id' => 234
),
1 => array
(
'id' => 11109,
'value' => 'Yes',
'field_id' => 123
),
2 => array
(
'id' => 11110,
'value' => 'No',
'field_id' => 234
),
3 => array
(
'id' => 11110,
'value' => 'No',
'field_id' => 237
),
4 => array
(
'id' => 11111,
'value' => 'No',
'field_id' => 237
),
);
$found = array();
$i = 0;
foreach ($cart as $key => $data) {
if ($data['field_id'] == 234 && $data['value'] == 'No') {
$found[$i]['id'] = $data['id'];
$found[$i]['value'] = $data['value'];
$found[$i]['field_id'] = $data['field_id'];
$i++;
}
}
echo "<pre>";
print_r($found);
然后输出是:
Array
(
[0] => Array
(
[id] => 11111
[value] => No
[field_id] => 234
)
)