Проверка массивов друг на друга и либо объединение, если не совпадает по значению, либо обновление/отправка, если есть сPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проверка массивов друг на друга и либо объединение, если не совпадает по значению, либо обновление/отправка, если есть с

Сообщение Anonymous »

У меня есть код, в котором я просто вызываю API, и преобразовал его в циклический вызов, чтобы можно было вызывать его с тремя разными значениями аргументов. Это связано с тем, что API структурирован таким образом, что он может принимать одно значение для этого аргумента за раз, но мне нужно сравнить результаты трех вызовов, и я думаю, что лучший способ — создать один массив из ответов, либо нажав значение, если оно существует, или отправить весь индекс, если нет. Думайте об этом так, как будто ответ API может предоставить мне данные, которые могут включать до 400 продуктов, продаваемых в трех магазинах. Все 400 товаров могут быть проданы в одном магазине, но, возможно, только 120 в другом и 100 в третьем.
Мне нужно, чтобы мой массив содержал все 400 товаров, но я хочу иметь массив внутри которого хранятся магазины для данного продукта.
Код:

Код: Выделить всё

  $IdentifierTest = 1472;
$arguments = ['store 1', 'store 2', 'store 3'];

$TestApi = app(TestApi::class);
$newArray = array();

foreach($arguments as $argument){
$testResponse = $TestApi->getData($IdentifierTest, $argument);
$Data = $testResponse->getResult()->getData(); // get the final results of call

//check if array empty, and if so, push all records
// if not empty, start checking 'id' against existing array records. If match, push stores. If not, add record to array

if(empty($newArray)){
array_push($newArray, $Data);
}else{
array_push($newArray, $Data);
}
}

$this->makeFile($IdentifierTest, $Data);
Пример ответа:

Код: Выделить всё

    array:426 [▼
0 => prices {#2698 ▼
#container: array:11 [▼
"prd" => 2380
"id" => "173489"
"price" => "65.00"
]
}
Проблема в том, что конкретный пример отображается только при вызове API с аргументами «магазин 1» и «магазин 2», но не «магазин 3». Я хотел бы вызвать API с каждым аргументом и создать новый массив с индексом магазинов, который помещает номер магазина, если идентификатор существует в вызове, например:

Код: Выделить всё

    array:426 [▼
0 => prices {#2698 ▼
#container: array:11 [▼
"prd" => 2380
"id" => "173489"
"price" => "65.00"
stores: array[
'store 1',
'store 2'
]
]
}
Поэтому, когда он вызывается с «магазином 1», я помещаю ответ в массив со значением «магазин 1» в качестве значения в «магазинах», а затем в «магазине 2» я беру ответ и сначала проверьте, существует ли этот идентификатор в созданном мной массиве. Если он существует, я добавлю «магазин 2» к «магазинам», а если нет, то создам новый индекс в массиве.
По сути, если продукт (id) 178293 продается во всех трех магазинах, то это означает, что он вернется во всех трех ответных вызовах API и в конечном итоге станет одной записью в этом новом массиве с store['store 1', 'store 2', 'store 3']< /код>
Мой текущий код, насколько я понял, просто проверяет новый массив, чтобы увидеть, пуст ли он, и если это не так, он отправляет весь ответ (для отладки я также нажимал, если массив не пусто, просто чтобы убедиться, что все значения вошли). Таким образом я получаю все значения, но внутри одного создается три больших массива, так что это еще один камень преткновения.
Как я могу создать из этого новый массив, куда я помещаю только хранилища, если идентификатор существует в вызове API, сохраняя текущую структуру?

Подробнее здесь: https://stackoverflow.com/questions/751 ... d-on-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»