Я пытаюсь найти более простое решение для этой конкретной ситуации:
- У меня есть одномерный массив (
$array1
) без ключей, содержащий около 400 значений (строк) - Затем я получаю данные из базы данных (используя подготовленный оператор) по 4 значения в строке, которые я использую для создания двумерного массива (
$array2a
), который мне понадобится позже. - Сейчас Я хочу сравнить значения
$array1
со значениями в первой строке $array2a
: я хочу создать список всех значений $array1
, которые не в первой строке база данных (поле «имя пользователя»).
Я нашел рабочее решение, но оно кажется слишком сложным - на шаге 2 используются два разных массива, один из которых содержит только строки по сравнению с массивом1, другое содержит все 4 значения, извлеченные из базы данных, которая мне понадобится позже:
/* $array1 exists already */
$array2a = array();
$array2b = array();
/* "$db" already contains the code for the database connection */
if($ps = $db->prepare("SELECT username, value2, value3, value4 FROM userlist")) {
$ps->execute();
$ps->bind_result($username, $value2, $value3, $value4);
while($ps->fetch()) {
$array2a[] = array($username, $value2, $value3, $value4);
$array2b[] = $username;
}
$ps->free_result();
}
$db->close;
/* comparison of $array1 to $array2b: */
foreach($array1 as $x) {
if(!in_array($x, $array2b)) {
echo $x."<br>";
}
}
Это дает мне список всех значений $array1
, которые не в столбце username
базы данных. Однако во второй части (foreach
l oop) я хотел бы использовать $array2a
вместо $array2b
, но я не знаю, как применить функцию in_array()
только к каждому первому значению массивов второго уровня $array2a
. Я пытался использовать if(!in_array($x, $array2a[0])) { ... }
, но это, конечно, не работает ...