PHP массивы - это «набор, где ключ =?»функция типа? - PullRequest
4 голосов
/ 30 сентября 2011

Есть ли встроенная функция php, которая позволяет мне устанавливать значение массива на основе соответствующего ключа? Возможно, в последнее время я пишу слишком много SQL, но я бы хотел выполнить следующую логику, не выписывая вложенный массив foreach, как показано ниже:

foreach($array1 AS $k1 => $a1) {
    foreach($array2 AS $a2) {
         if($a1['id'] == $a2['id']) {
              $array[$k1]['new_key'] = $a2['value'];
         }
    }
}

Есть ли лучший способ сделать это? В логике SQL это будет "SET array1.new_key = x WHERE array1.id = array2.id". Опять же, в последнее время я пишу слишком много SQL: S

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Когда мне нужно сделать это, я использую функцию, чтобы сначала отобразить значения одного массива по id:

function convertArrayToMap(&$list, $attribute='id') {
    $result = array();
    foreach ($list as &$item) {
        if (is_array($item) && array_key_exists($attribute, $item)) {
            $result[$item[$attribute]] = &$item;
        }
    }
    return $result;
}

$map = convertArrayToMap($array1);

Затем выполните итерацию по другому массиву и присвойте значения:

foreach ($array2 AS $a2) {
     $id = $a2['id']; 
     $map[$id]['new_key'] = $a2['value'];
}

Это в целом меньше циклов даже для одного прохода, и это удобно для дальнейших операций в будущем.

1 голос
/ 30 сентября 2011

Это хорошо и правильно

foreach(&$array1 AS &$a1) {
    foreach($array2 AS $a2) {
         if($a1['id'] == $a2['id']) {
              $a1['new_key'] = $a2['value'];
         }
    }
}
...