Различаем 2 массива и удаляем недостающие элементы
Я пытаюсь обновить массив с некоторой информацией из меньшего массива с тем же количеством элементов. Большой массив генерируется каждые 24 часа, но меньший генерируется каждые 4 часа, но иногда в меньшем массиве меньше элементов, поэтому я хочу удалить эти элементы из большего массива, но как я могу это сделать?
Вот первый элемент меньшего массива:
array(5) {
["category_id"]=>
string(1) "8"
["product_url"]=>
string(58) "http://example.net/?id=1752"
["price_bgn"]=>
float(142.8)
["price_eur"]=>
float(72.99)
["quantity"]=>
int(5)
}
Вот первый элемент большего массива:
array(23) {
["product_id"]=>
string(4) "1752"
["product_sku"]=>
string(7) "SKU1752"
["category_id"]=>
string(1) "8"
["product_url"]=>
string(58) "http://example.net/?id=1752"
["additional_images"]=>
array(4) {
[0]=>
string(64) "http://example.net/vario.jpg"
[1]=>
string(73) "http://example.net/duraflex_logo1.jpg"
[2]=>
string(67) "http://example.net/YKK-logo.jpg"
[3]=>
string(67) "http://example.net/Air-mesh.jpg"
}
["variants"]=>
array(4) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
}
["related_products"]=>
array(4) {
[0]=>
array(2) {
["product_id"]=>
string(2) "18"
["product_sku"]=>
string(5) "SKU18"
}
[1]=>
array(2) {
["product_id"]=>
string(3) "248"
["product_sku"]=>
string(6) "SKU248"
}
[2]=>
array(2) {
["product_id"]=>
string(4) "1755"
["product_sku"]=>
string(7) "SKU1755"
}
[3]=>
array(2) {
["product_id"]=>
string(4) "1833"
["product_sku"]=>
string(7) "SKU1833"
}
}
["manufacturer_id"]=>
string(1) "1"
["quantity"]=>
int(5)
["metadescription_bg"]=>
string(233) ""
["detaileddescription_bg"]=>
string(5342) ""
["metadescription_en"]=>
string(159) ""
["metakeywords_en"]=>
string(38) ""
["name_en"]=>
string(38) ""
["price_eur"]=>
float(72.99)
["shortdescription_en"]=>
string(138) ""
["detaileddescription_en"]=>
string(2485) ""
["images_url"]=>
string(51) "http://example.net/?idpics=3948"
["images"]=>
array(4) {
[0]=>
string(50) "http://example.net/pic6129.jpg"
[1]=>
string(50) "http://example.net/pic6164.jpg"
[2]=>
string(50) "http://example.net/pic6165.jpg"
[3]=>
string(50) "http://example.net/pic5745.jpg"
}
}
Поэтому, если я сопоставляю URL продукта, я обновляю цены. Но как удалить элемент из большего массива, если в меньшем массиве нет соответствующего URL? Это код для обновления:
foreach($this->productLinks as $product) {
foreach($this->productLinksOld as $k => $productOld) {
if($product['product_url'] == $productOld['product_url']) {
$this->productLinksOld[$k]['price_bgn'] = $product['price_bgn'];
$this->productLinksOld[$k]['price_eur'] = $product['price_eur'];
$this->productLinksOld[$k]['quantity'] = $product['quantity'];
}
}
}
ура, Джордж!
1 ответ
Я делаю небольшую проверку для этого, но я не знаю, является ли это лучшим способом сделать это. Это код:
$links = unserialize(file_get_contents($this->_tempProductLinksFile));
$links[] = array(
'category_id' => 8,
'product_url' => 'http://www.example.net/?id=1752123',
'price_bgn' => 1.2,
'price_eur' => 0.6,
'quantity' => 15,
);
$products = unserialize(file_get_contents($this->_tempFullProductInfoFile));
echo count($links).' | '.count($products).'<br />';
foreach($links as $l) {
$ll[] = $l['product_url'];
}
foreach($products as $p) {
$pp[] = $p['product_url'];
}
foreach($products as $k => $pm) {
if(!in_array($pm['product_url'], $ll)) {
echo 'This key doesn\'t exists in small array '.$k.'<br />';
}
}
foreach($links as $k => $lm) {
if(!in_array($lm['product_url'], $pp)) {
echo 'This key doesn\'t exists in big array '.$k.'<br />';
}
}
Сначала я получаю кэшированный контент для небольшого массива в виде ссылок и для большого массива в качестве продуктов. Затем я создаю новый подмассив для ссылок, чтобы проверить случай, если в маленьком массиве есть продукт без полной информации в большом массиве. В конце концов я делаю счет для 2 массивов, и результат:
1501 | 1503
Затем я получаю только URL-адреса продуктов в других массивах, чтобы проверить URL каждого продукта в другом массиве, и в результате получается:
This key doesn't exists in small array 44
This key doesn't exists in small array 313
This key doesn't exists in small array 685
This key doesn't exists in big array 1500
Это означает, что последняя запись в ссылках (созданная вручную) не существует в большом массиве, а 3 других ссылки из массива products не существуют в небольшом массиве. Кроме того, время выполнения этого кода составляет ~200 мс на моей старой домашней машине, что достаточно для меня:)
Если кто-нибудь может дать мне лучшее решение, я буду очень благодарен:)
ура, Джордж!