У меня есть два нескольких массива с данными ключ => значение в них. Например, вот так:
$k_a = array( array(
"article" => "c",
"price" => 2
), array(
"article" => "f",
"price" => 3
)
);
$k_b = array( array(
"article" => "a",
"price" => 2
), array(
"article" => "b",
"price" => 4
), array(
"article" => "c",
"price" => 1
), array(
"article" => "g",
"price" => 3
)
);
У меня есть массив со всеми статьями, но цена установлена на ноль.
$a_f = array( array(
"article"=> "a",
"price" => 0,
), array(
"article"=> "b",
"price" => 0,
), array(
"article"=> "c",
"price" => 0,
), array(
"article"=> "d",
"price" => 0,
), array(
"article"=> "e",
"price" => 0,
), array(
"article"=> "f",
"price" => 0,
), array(
"article"=> "g",
"price" => 0,
), array(
"article"=> "h",
"price" => 0,
)
);
Теперь я хочу проверить, существуют ли значения ключей article в $ k_a и $ k_b в $ a_f, и создать новый массив со значениями ключевой цены для этой статьи. Другой товар должен иметь нулевую цену. В и я хочу сравнить два новых массива и удалить ключевые статьи, где цена равна нулю.
У и массивы должны быть такими:
$k_a_new =array( array(
"article" => "a",
"price" => 0
), array(
"article" => "b",
"price" => 0
), array(
"article" => "c",
"price" => 2
), array(
"article" => "f",
"price" => 3
), array(
"article" => "g",
"price" => 0
)
);
$k_b_new = array( array(
"article" => "a",
"price" => 2
), array(
"article" => "b",
"price" => 4
), array(
"article" => "c",
"price" => 1
), array(
"article" => "f",
"price" => 0
), array(
"article" => "g",
"price" => 3
)
);
В результирующем массиве должны содержаться все статьи обоих массивов, кроме самой статьи, если она существует. Есть ли функции или конкретный способ решить эту проблему?
Я пытался перебрать массивы и показать те же значения статей, но не знаю, как изменить значения цен или добавить статьи с нулевой ценой?
echo "<br>";
foreach($k_b as $key_1=>$value_1){
foreach($value_1 as $k_11=>$v_11){
if ($k_11 == "article"){
foreach($a_f as $key_2=>$value_2){
foreach($value_2 as $k_21=>$v_21){
if ($k_21 === "article"){
if ($v_11 === $v_21){
print_r($v_21);
echo "<br>";
}
}
}
}
}
}
}
вы можете получить результат только с двумя входными массивами, третий-один не нужен
@ADyson My Code ничего не делает ... просто перебирайте массивы, так что нет необходимости показывать ...
@AlivetoDie Можете ли вы показать мне пример, как?
Значит, вы говорите, что еще ничего не пробовали? Существует множество функций PHP, которые имеют дело с массивами, сопоставлением ключей, проверкой наличия ключей и значений и т. д. Искать в Интернете легко. По крайней мере, вы должны были действительно предпринять некоторые попытки, прежде чем просить других решить для вас сложную задачу в их свободное время.
@Alex, вы должны показать некоторые усилия по коду, что вы пробовали до сих пор
@ADyson, это мой код цикла, но я не знаю, как продолжить или изменить и добавить vaules
Это означает, что вы на самом деле не проводили никаких исследований, потому что об изменении и добавлении значений в массивы нетрудно узнать. Если вы спрашиваете о логике, с помощью которой вы это делаете, это означает, что вам нужно сесть, обдумать процесс на бумаге и придумать алгоритм (то есть логический процесс для выполнения задачи, который можно автоматизировать с помощью компьютер). Затем попробуйте реализовать алгоритм. Если вы застряли с попыткой реализация, вернитесь к своей попытке, и мы можем помочь вам в дальнейшем с аспектами, специфичными для PHP (если Google вам еще не помог).
@Alex: Я попытался понять логику вашего вопроса, и, как я объяснил, это не имеет для меня смысла. Бывший. вы начинаете с k_a, k_b и a_f. Тогда вам нужны два новых массива. №1 вы говорите если значения ключей article в $ k_a и $ k_b существуют в $ a_f и создать новый массив со значениями ключевой цены для этой статьи. Для меня это означает a: 0, b: 0, c: 2 или 1, f: 0, g: 0. Из выходных данных образца вы берете наивысшее значение для c. Тем не менее, вы получаете a: 0:, b: 0, c: 2, f: 3, g: 0. почему f: 3? Его нет в к_б. Сначала объясните свою логику.






Делать это нужно так: -
<?php
$k_a = array( array(
"article" => "c",
"price" => 2
), array(
"article" => "f",
"price" => 3
)
);
$k_b = array( array(
"article" => "a",
"price" => 2
), array(
"article" => "b",
"price" => 4
), array(
"article" => "c",
"price" => 1
), array(
"article" => "g",
"price" => 3
)
);
$final_article_array = array_values(array_unique(array_merge(array_column($k_a,'article'),array_column($k_b,'article'))));
sort($final_article_array);
$k_a_new = [];
$k_b_new = [];
foreach($final_article_array as $key=>$final_article_arr){
$k = array_search($final_article_arr,array_column($k_a,'article'));
if ($k !==false){
$k_a_new[$final_article_arr]['article'] = $final_article_arr;
$k_a_new[$final_article_arr]['price'] = $k_a[$k]['price'];
}else{
$k_a_new[$final_article_arr]['article'] = $final_article_arr;
$k_a_new[$final_article_arr]['price'] = 0;
}
$j = array_search($final_article_arr,array_column($k_b,'article'));
if ($j !==false){
$k_b_new[$final_article_arr]['article'] = $final_article_arr;
$k_b_new[$final_article_arr]['price'] = $k_b[$j]['price'];
}else{
$k_b_new[$final_article_arr]['article'] = $final_article_arr;
$k_b_new[$final_article_arr]['price'] = 0;
}
}
$k_a_new = array_values($k_a_new);
$k_b_new = array_values($k_b_new);
print_r($k_a_new);
print_r($k_b_new);
Выход: -https://3v4l.org/DTiJk
Примечание: - объяснение
1) попробуйте получить все значения статей из $k_a и $k_b, объединить их, чтобы получить всю статью в один массив, удалить дубликаты из этого массива, а затем повторно проиндексировать этот массив. Теперь отсортируйте этот массив статей по значению.
2) Выполните итерации и проверьте, присутствует ли статья в массивах $ k_a и $ k_b или нет (используя array_search)
3) Теперь вы получаете индекс дочернего массива через array_search(), если статья найдена.
4) На основе этого ключа получите значение цены дочернего массива и добавьте его в свой окончательный массив с соответствующей статьей.
5) Если индекса нет, поместите цену 0 для соответствующей статьи в окончательный массив.
Получите все функции Php здесь
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. Он никогда не узнает, если мы будем кормить его с ложечки.
@Alive to Die спасибо, я не знал, что есть такие функции, как array_column () или array_search () для массивов значений ключей
«не очень эффективно» ничего конкретного не говорит о вашей проблеме. Пожалуйста, покажите свой текущий код и объясните, что он выводит в данный момент. Мы не можем исправить то, чего не видим. Спасибо