Foreach не вставляет ключ и значение в элемент массива

Когда я отправляю массив и значение этой функции, я бы хотел, чтобы он вставлял в массив новый ключ (id) и его $value, но он не

function AddID($tab,$value){
 foreach($tab as $element){
 $element['id']=$value;
 }
 return $tab;
}

Может ли кто-нибудь объяснить мне, что я делаю неправильно?

Редактировать:

Вход:

$result1=$function1($search_string);
 $result_array1 = CreateArray($result1);
 $result_array1 = AddID($result_array1,"profile");

(CreateArray отлично работает с массивом mysql fetch)

Вывод:

array (size=3)
 0 => 
 array (size=22)
 0 => string '[removed_email]ul' (length=17)
 'Email' => string '[removed_email]ul' (length=17)
 1 => string 'innov24' (length=7)
 'NickName' => string 'innov24' (length=7)
 2 => string 'TCA-Innov24' (length=11)
 'Company' => string 'TCA-Innov24' (length=11)
 3 => string 'hahaha' (length=6)
 'LastName' => string 'hahaha' (length=6)
 4 => string 'pouet' (length=5)
 'FirstName' => string 'pouet' (length=5)
 5 => string 'Antarctica' (length=10)
 'Country' => string 'Antarctica' (length=10)
 6 => string 'Dans mon igloo' (length=14)
 'City' => string 'Dans mon igloo' (length=14)
 7 => string 'Journalist' (length=10)
 'Name' => string 'Journalist' (length=10)
 8 => string '1' (length=1)
 'ID' => string '1' (length=1)
 9 => string '290' (length=3)
 'AqbPoints' => string '290' (length=3)
 10 => string 'AQ' (length=2)
 'count' => string 'AQ' (length=2)
3 ответа

Вам нужно передать ссылку на $element. Ссылка на документацию может объяснить ее более четко, чем я могу, но вот цитата:

Вы можете передать переменную по ссылке на функцию, чтобы функция могла изменять переменную.

Ваша функция должна выглядеть так:

function AddID($tab, $value){
 foreach($tab as &$element) { // Notice the &$element
 $element['id'] = $value;
 }

 return $tab;
}

Вот код: https://ideone.com/ax311G

Если вы не хотите передавать по ссылке, вам нужно будет создать новый массив из существующего:

function AddID($tab, $value){
 $newArray = array();
 foreach($tab as $element){
 $element['id'] = $value;
 $newArray[] = $element; // Adds to new array
 }
 return $newArray;
}


Вам нужно изменить его по ссылке или с помощью ключа для массива. Вам также необходимо убедиться, что каждый элемент массива $tab также является массивом, если вы не можете преобразовать его в массив.

Вот решение, которое заботится обо всех случаях:

function AddID($tab,$value){
 foreach($tab as $k => $v) {
 if (is_array($v)) {
 $tab[$k]['id']=$value;
 } else {
 $tab[$k] = array($v, 'id' => $value);
 }
 }
 return $tab;
}


foreach($tab as $value) {
 $element[] = $value;
 ^^--shorthand for "array_push()"
}

licensed under cc by-sa 3.0 with attribution.