PHP阵列搜索和删除
我有两个数组:PHP阵列搜索和删除
阵列1:
Array ([0] => Array ([id] => et1 [supplier_id] => 4 [supplier_product_code] => 00054X [is_active] => 1)
[1] => Array ([id] => et2 [supplier_id] => 4 [supplier_product_code] => 000558 [is_active] => 1)
[2] => Array ([id] => et3 [supplier_id] => 5 [supplier_product_code] => 00054X [is_active] => 1));
阵列2:
Array ([0] => Array ([id] => et1 [same_sku] => et3);
我需要从数组2删除所有same_skus在阵列1。
所以从我的结果数组我需要阵列1是:
Array ([0] => Array ([id] => et1 [supplier_id] => 4 [supplier_product_code] => 00054X [is_active] => 1)
[1] => Array ([id] => et2 [supplier_id] => 4 [supplier_product_code] => 000558 [is_active] => 1));
代码,我现在所拥有的不工作。
public function search_array($array, $val)
{
foreach ($array as $key => $row)
{
if ($row['id'] === $val)
{
return $key;
}
}
}
foreach($array2->result() as $row)
{
$id = $row->id;
$same_sku = $row->same_sku;
$key = $this->search_array($array1, $id);
if(!empty($key))
{
$same_sku_key = $this->search_array($array1, $same_sku);
if(!empty($same_sku_key))
unset($array1[$same_sku_key]);
}
}
在下面的代码中,我重新创建了您的示例中的两个数组。然后我创建了一个函数,用于从干草堆数组(array1)中删除所有具有与针数组(array2)内的“same_sku”值相匹配的“id”的子数组。最后一行回显结果数组。
EDIT 我已修改原始答案通过引用并取消不必要的子阵列,以通,而不是由值来传递,循环和返回另一个数组的数组值。这应该解决内存问题,以及您评论中提到的其他问题。
$array1 = array(
array(
'id' => 'et1',
'supplier_id' => '4',
'supplier_product_code' => '00054X',
'is_active' => '1'
),
array(
'id' => 'et2',
'supplier_id' => '4',
'supplier_product_code' => '000558',
'is_active' => '1'
),
array(
'id' => 'et3',
'supplier_id' => '5',
'supplier_product_code' => '00054X',
'is_active' => '1'
),
array(
'id' => 'et4',
'supplier_id' => '5',
'supplier_product_code' => '00054X',
'is_active' => '1'
)
);
$array2 = array(
array(
'id' => 'et1',
'same_sku' => 'et3'
),
array(
'id' => 'et2',
'same_sku' => 'et4'
)
);
function remove_same_sku(&$haystack, &$needles){
foreach($needles as $needle){
foreach($haystack as $key => $val){
if($val['id'] === $needle['same_sku']){
unset($haystack[$key]);
}
}
}
}
remove_same_sku($array1, $array2);
echo print_r($array1);
谢谢你的回答,但我看到的问题是,不会我需要另一个函数来检查$ haystack [$ key]不在$ returnArray []中,只能添加它? – user4676307
我使用了函数,它的内存不足,我认为这是因为它插入了$ haystack中所有id不是same_sku的数据。因此,例如,如果第一个循环在same_sku et3上,它将从$ haystack中插入所有数据,其中id不等于$ et3,然后移动到下一个增量并再次执行相同操作。 – user4676307
答案已经更新。请参阅编辑评论。 – commanderZiltoid
到目前为止你累了什么?你能分享你的代码吗? – Nirnae
@Nirnae我已经添加了我累了的东西 – user4676307
您是否试图组合这两个数组并删除重复值? – commanderZiltoid