Как получить соответствующее значение ключа из двух массивов в foreach - PullRequest
0 голосов
/ 15 октября 2019

У меня есть следующие массивы в кодировке json:

Array1 {"1":"9","3":"7","4":"6","5":"10","6":"8"}
Array2 {"1":"1","2":"1","3":"1","4":"1","5":"1","6":"7"}

Затем Json декодирует и вставляет в print_r () я получил:

stdClass Object ( [1] => 9 [3] => 7 [4] => 6 [5] => 10 [6] => 8 )
stdClass Object ( [1] => 1 [3] => 1 [4] => 1 [5] => 1 [6] => 7 )

Где в значениях Array1 (9, 7, 6, 10, 8) - идентификатор продукта, а значения Array2 (1,1,1,1,7) - соответствующее количество продукта.

Теперь я хотел бы получить продукты на основе идентификатора продукта и хочу показатьсоответствующее количество.

Как я могу сделать это в foreach?

Ответы [ 4 ]

0 голосов
/ 15 октября 2019

Установив для параметра $assoc значение json_decode равным true, мы можем преобразовать значения JSON в массивы, а не в объекты, а затем выполнить итерацию по массиву product_id, находя совпадающие величины из второго массива:

$j1 = '{"1":"9","3":"7","4":"6","5":"10","6":"8"}';
$j2 =  '{"1":"1","2":"1","3":"1","4":"1","5":"1","6":"7"}';
$array1 = json_decode($j1, true);
$array2 = json_decode($j2, true);
foreach ($array1 as $key => $product_id) {
    $quantity = $array2[$key] ?? 0;
    echo "Product $product_id: Quantity: $quantity\n";
}

Вывод:

Product 9: Quantity: 1
Product 7: Quantity: 1
Product 6: Quantity: 1
Product 10: Quantity: 1
Product 8: Quantity: 7

Демонстрация на 3v4l.org

0 голосов
/ 15 октября 2019

Может быть несколько реализаций:

Вы можете использовать array_search в цикле foreach

или вы можете использовать array_combine , которые возвращают вам новыймассив с продуктом => количество

0 голосов
/ 15 октября 2019

С простой выпиской и проверкой, существует ли идентификатор продукта:

$productId = json_decode('{"1":"9","3":"7","4":"6","5":"10","6":"8"}', true);
$productQuantity = json_decode('{"1":"1","2":"1","3":"1","4":"1","5":"1","6":"7"}', true);

foreach($productId as $id){
  $quantity = "?";  //if id not exists 
  if(array_key_exists($id, $productQuantity)) {
    $quantity = $productQuantity[$id];
  }
  echo "productId: ".$id." Quantity:".$quantity."<br>\n";
}

возвращает

productId: 9 Quantity:?
productId: 7 Quantity:?
productId: 6 Quantity:7
productId: 10 Quantity:?
productId: 8 Quantity:?
0 голосов
/ 15 октября 2019

https://www.php.net/manual/en/function.array-combine.php

$string1 = '{"1":"9","3":"7","4":"6","5":"10","6":"8"}';
$string2 = '{"1":"1","2":"1","3":"1","4":"1","5":"1","6":"7"}';
$array1 = json_decode($string1, true);
$array2 = json_decode($string2, true);

// Filter arrays to keep only those keys that both have in common
$filtered1 = array_intersect_key($array1, $array2);
$filtered2 = array_intersect_key($array2, $array1);

// Create new array with $filtered1 as keys and $filtered2 as values
$newArray = array_combine($filtered1, $filtered2);

// Test
$exampleId = 7;
$exampleQuantity = $newArray[$exampleId]; // Outputs 1
...