Задать вопрос
@Screpka

Как сравнить ключи двух разных ассоциативных массивов?

У меня есть два массива $resurses и $recipes, которые я вынимаю из msql.
$resurses
array(2) { [0]=> array(5) { ["id"]=> string(1) "7" ["input_ingridient"]=> string(25) "Железная руда" ["input_value"]=> string(4) "2000" ["output_ingridient"]=> string(10) "Сталь" ["output_value"]=> string(4) "1600" } [1]=> array(5) { ["id"]=> string(1) "5" ["input_ingridient"]=> string(18) "Древесина" ["input_value"]=> string(4) "1000" ["output_ingridient"]=> string(12) "Бревно" ["output_value"]=> string(3) "600" } }

$recipes
array(2) { [0]=> array(22) { ["id"]=> string(1) "4" ["title_recipe"]=> string(25) "Первый рецепт" ["1_title_ingridient"]=> string(10) "Сталь" ["1_value_ingridient"]=> string(3) "200" ["2_title_ingridient"]=> string(18) "Название 2" ["2_value_ingridient"]=> string(1) "2" ["3_title_ingridient"]=> string(18) "Название 3" ["3_value_ingridient"]=> string(1) "3" ["4_title_ingridient"]=> string(18) "Название 4" ["4_value_ingridient"]=> string(1) "4" ["5_title_ingridient"]=> string(18) "Название 5" ["5_value_ingridient"]=> string(1) "5" ["6_title_ingridient"]=> string(18) "Название 6" ["6_value_ingridient"]=> string(1) "6" ["7_title_ingridient"]=> string(18) "Название 7" ["7_value_ingridient"]=> string(1) "7" ["8_title_ingridient"]=> string(18) "Название 8" ["8_value_ingridient"]=> string(1) "8" ["9_title_ingridient"]=> string(18) "Название 9" ["9_value_ingridient"]=> string(1) "9" ["10_title_ingridient"]=> string(19) "Название 10" ["10_value_ingridient"]=> string(2) "10" } [1]=> array(22) { ["id"]=> string(1) "2" ["title_recipe"]=> string(25) "Второй рецепт" ["1_title_ingridient"]=> string(19) "Название 11" ["1_value_ingridient"]=> string(6) "234234" ["2_title_ingridient"]=> string(19) "Название 12" ["2_value_ingridient"]=> string(6) "234234" ["3_title_ingridient"]=> string(19) "Название 13" ["3_value_ingridient"]=> string(3) "434" ["4_title_ingridient"]=> string(19) "Название 14" ["4_value_ingridient"]=> string(5) "43443" ["5_title_ingridient"]=> string(19) "Название 15" ["5_value_ingridient"]=> string(3) "100" ["6_title_ingridient"]=> string(18) "Название 6" ["6_value_ingridient"]=> string(5) "23423" ["7_title_ingridient"]=> string(18) "Название 7" ["7_value_ingridient"]=> string(6) "234234" ["8_title_ingridient"]=> string(18) "Название 8" ["8_value_ingridient"]=> string(6) "234324" ["9_title_ingridient"]=> string(18) "Название 9" ["9_value_ingridient"]=> string(2) "43" ["10_title_ingridient"]=> string(19) "Название 10" ["10_value_ingridient"]=> string(1) "4" } }


Мне нужно их сравнить и найти одинаковые значения. НО, все это мне нужно сделать в одном цикле, который выводит информацию
<? foreach ($recipes as $a) { ?>
					
					<div class="panel panel-default custom-panel">
						<div class="panel-heading"><?=$a['title_recipe']?></div>
						<div class="panel-body">
							
							<ul class="list-group res">
								<li class="list-group-item"><?=$a['1_title_ingridient']?><span class="badge"><?=$a['1_value_ingridient']?></span></li>
								<li class="list-group-item custom-list-group-item"><??><span class="badge custom-badge"><??></span></li>
							</ul>
						</div>
						<div class="panel-footer">Показано количество ингридиентов на одно изготовление.</div>
					</div>
					<? } ?>


В коде выше, для примера, я вывел все значения из массива $resurses. Теперь мне нужно, чтобы полученное название ресурса из выражения <?=$a['input_value']?> можно было сравнить с таким же из массива $recipes, умножить их значения и вывести его туда же, вместо <?=$a['input_value']?>.

Я не понимаю как мне это сделать. Как можно сравнить два массива, чтобы они автоматически проверяли похожие значения в одном цикле, который выше? Может быть есть какая-то функция, которую я не могу найти. Или помогите написать такую, пожалуйста.

Логически-то я понимаю как это должно работать, но вот php я не так хорошо знаю, чтобы создать нужную конструкцию.
  • Вопрос задан
  • 443 просмотра
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
Думаю верно вас понял
<?php
/**
 * Created by PhpStorm.
 * User: alex
 * Date: 08.05.16
 * Time: 17:57
 */


$resurses = array("0" => array(
    "id" => "7", "input_ingridient" => "Железная руда", "input_value" => "2000",
    "output_ingridient" => "Сталь", "output_value" => "1600"),
    "1" => array(
        "id" => "5", "input_ingridient" => "Древесина", "input_value" => "1000", "output_ingridient" => "Бревно",
        "output_value" => "600"));

$recipes = array(
    "0" => array(

        "id" => "4", "title_recipe" => "Первый рецепт", "1_title_ingridient" => "Сталь",
        "1_value_ingridient" => "200", "2_title_ingridient" => "Название 2", "2_value_ingridient" => "2",
        "3_title_ingridient" => "Название 3",
        "3_value_ingridient" => "3", "4_title_ingridient" => "Название 4", "4_value_ingridient" => "4",
        "5_title_ingridient" => "Название 5",
        "5_value_ingridient" => "5", "6_title_ingridient" => "Название 6", "6_value_ingridient" => "6",
        "7_title_ingridient" => "Название 7",
        "7_value_ingridient" => "7", "8_title_ingridient" => "Название 8", "8_value_ingridient" => "8",
        "9_title_ingridient" => "Название 9",
        "9_value_ingridient" => "9", "10_title_ingridient" => "Название 10", "10_value_ingridient" => "10"),
    "1" => array(
        "id" => "2", "title_recipe" => "Второй рецепт", "1_title_ingridient" => "Название 11",
        "1_value_ingridient" => "234234", "2_title_ingridient" => "Название 12", "2_value_ingridient" => "234234",
        "3_title_ingridient" => "Название 13", "3_value_ingridient" => "434", "4_title_ingridient" => "Название 14",
        "4_value_ingridient" => "43443", "5_title_ingridient" => "Название 15", "5_value_ingridient" => "100",
        "6_title_ingridient" => "Название 6", "6_value_ingridient" => "23423", "7_title_ingridient" => "Название 7",
        "7_value_ingridient" => "234234", "8_title_ingridient" => "Название 8", "8_value_ingridient" => "234324",
        "9_title_ingridient" => "Название 9", "9_value_ingridient" => "43", "10_title_ingridient" => "Название 10",
        "10_value_ingridient" => "4"));
function resurses($resurses, $recipes)
{
    foreach ($resurses as $key => $resurse) {
        foreach ($recipes as $recipe) {
            $qty = count($recipe);
            foreach ($recipe as $key_item => $item) {
                $qty--;
                if ($resurse['output_ingridient'] == $recipe[$qty . '_title_ingridient']) {
                    $resurses[$key]['input_value'] = $recipe[$qty . '_value_ingridient'] * $resurse['input_value'];
                    for ($i = 1; $i <= 10; $i++) {

                        $resurses[$key][$i . '_title_ingridient'] = $recipe[$i . '_title_ingridient'];
                        $resurses[$key][$i . '_value_ingridient'] = $recipe[$i . '_value_ingridient'];
                    }

                }


            }
        }

    }
    return $resurses;
}

$resurses = resurses($resurses, $recipes);

foreach ($resurses as $a) {
    $qty_res = (count($a) - 6) / 2;
    echo ' <div class="panel panel-default custom-panel">
        <div class="panel-heading">Title recipe</div>
        <div class="panel-body">
            <ul class="list-group res">
                <li class="list-group-item">' . $a['input_ingridient'] . ' <span class="badge">' . $a['input_value'] . '</span></li>';

    for ($i = 1; $i <= $qty_res; $i++) {

        echo '<li class="list-group-item custom-list-group-item">' . $a[$i . '_title_ingridient'] .
            ' <span class="badge custom-badge">' . $a[$i . '_value_ingridient'] . '</span></li>';
    }
    echo '  </ul>

        </div>
        <div class="panel-footer">Показано количество ингридиентов на одно изготовление.</div>
    </div>';
}

233dacf3666b498db9ab339f404b5b5d.png
Ответ написан
hedint
@hedint
Senior front-end developer
Если у вас каждая запись в первом массиве соответствует каждой записи во втором массиве, вы можете сделать не foreach цикл, а обычный for
$count = count($resurses );
for ($i = 0;$i < $count; $i++) {
$first_arr_item= $resurses[i];
$second_arr_item = $recipes[i];
if ($first_arr_item['input_value'] != $second_arr_item['input_value']) {
//do smth
}
}

(это не готовое решение, вам надо будет немного его подпилить к вашей реализации с шаблонами).

В случае же, если массивы не соответствуют друг другу, вам нужно как-то по-другому организовать ваши данные (иметь в одном массиве ссылку на элементы другого или что-то еще)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы