programing

각 루프별로 mysql 결과 집합 데이터에 액세스하는 방법

jooyons 2023. 10. 22. 20:01
반응형

각 루프별로 mysql 결과 집합 데이터에 액세스하는 방법

데이터베이스 클래스를 이용하여 MySQL을 조회하는 php 앱을 개발하고 있습니다.

수업은 여기 있습니다: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/
*자습서에는 여러 가지 나쁜 관행이 설명되어 있습니다. 현대적인 지침으로 사용해서는 안 됩니다.

저는 제 요구에 맞추기 위해 수업에 약간의 수정을 가했지만, 문제가 하나 있습니다(어쩌면 바보 같은 문제일 수도 있습니다).

사용시select()3개의 연관 열(id, first name, last name)이 있는 행이 있는 다차원 배열을 반환합니다.

배열([0] => 배열([id] => 1[이름] => 이름 1[성] => 성 1)
[1] => 배열([id] => 2[이름] => 이름2[성] => 성2)
[2] => 배열([id] => 3[이름] => 이름 3[성] => 성3))

이제 이 배열을 mysql 결과로 사용하기를 원합니다 (mysql_fetch_assoc()).

함께 사용할 수 있다는 것을 알고 있습니다.foreach(), 하지만 이는 단순/평탄한 배열의 경우입니다.나는 새로운 것을 다시 선언해야 한다고 생각합니다.foreach()각각의 안에서foreach(), 속도가 느려지거나 서버 부하가 더 높아질 수도 있다고 생각합니다.

그래서 적용하는 방법foreach()가장 간단한 방법은?

여기서 각각 사용하시면 됩니다.

foreach ($rows as $row) {
    echo $row['id'];
    echo $row['firstname'];
    echo $row['lastname'];
}

제 생각에 당신은 수치 지수로 데이터에 접근하는 것에 익숙하다고 생각합니다(예:$row[0]), 그러나 이것은 필요하지 않습니다.우리는 연관 배열을 이용해 우리가 추구하는 데이터를 얻을 수 있습니다.

사용가능array_walk_recursive:

array_walk_recursive($array, function ($item, $key) {
    echo "$key holds $item\n";
});

php로 배열된 경우, 각 루프는 항상 좋은 해결책입니다.
이 경우 다음과 같은 경우가 있습니다.

foreach($my_array as $number => $number_array)
    {
    foreach($number_array as $data = > $user_data)
        {
            print "Array number: $number, contains $data with $user_data.  <br>";
        }
    }

브래드의 대답에 따라 한 말이겠지만, 제가 평판이 좋은 편은 아닙니다.

최근에 저는 다차원 배열의 키가 필요하다는 것을 알게 되었습니다. 즉, 그것은 단지 배열을 위한 인덱스가 아니라, 각 루프에 대한 것이었습니다.

그것을 달성하기 위해, 당신은 수용된 답변과 매우 유사한 것을 사용할 수 있지만, 대신 다음과 같이 키와 가치를 나눌 수 있습니다.

foreach ($mda as $mdaKey => $mdaData) {
    echo $mdaKey . ": " . $mdaData["value"];
}

누군가에게 도움이 되길 바랍니다.

Holla/Hello, 알겠어요!파일명, tmp_name, file_size 등을 쉽게 구할 수 있습니다.그래서 줄 코드로 파일 이름을 얻는 방법을 알려드리겠습니다.

for ($i = 0 ; $i < count($files['name']); $i++) {
    echo $files['name'][$i].'<br/>';
}

제 PC에서 테스트가 됩니다.

다차원 배열의 각 값에서 세부 정보를 가져오는 것은 배열을 배치한 후에 매우 간단합니다.이것이 배열입니다.

$example_array = array(
array('1','John','Smith'),
array('2','Dave','Jones'),
array('3','Bob','Williams')
);

그런 다음 각 루프에 대해 다음과 같이 배열을 실행합니다.

foreach ($example_array as $value) {
echo $value[0]; //this will echo 1 on first cycle, 2 on second etc....
echo $value[1]; //this will echo John on first cycle, Dave on second etc....
echo $value[2]; //this will echo Smith on first cycle, Jones on second etc....
}

원하는 대로 테이블에 메아리칠 수 있습니다.

echo "<table>"
    foreach ($example_array as $value) {
    echo "<tr><td>" . $value[0] . "</td>";
    echo "<td>" . $value[1] . "</td>";
    echo "<td>" . $value[2] . "</td></tr>";
    }
echo "</table>";

다음과 같은 테이블을 제공해야 합니다.

|1|John|Smith   |
|2|Dave|Jones   |
|3|Bob |Williams|

의 예:mysql_fetch_assoc():

while ($row = mysql_fetch_assoc($result))
{
    /* ... your stuff ...*/
}

당신의 경우는foreach, 을$result배열을 사용하여 얻을 수 있습니다.select():

foreach ($result as $row)
{
    /* ... your stuff ...*/
}

그것은 적절한 반복과 거의 같습니다.

이상적으로 다차원 배열은 일반적으로 배열의 배열이므로 빈 배열을 선언한 다음 별도의 배열로 db 결과에서 키 및 값 쌍을 생성하고, 마지막으로 반복 시 생성된 각 배열을 외부 배열로 푸시합니다.이것이 별도의 함수 호출일 경우 외부 배열을 반환할 수 있습니다.도움이 되기를 바랍니다.

$response = array();    
foreach ($res as $result) {
        $elements = array("firstname" => $result[0], "subject_name" => $result[1]);
        array_push($response, $elements);
    }

이것이 꽤 오래된 대답이라는 것을 압니다.사용하지 않고 보다 빠른 솔루션을 제공합니다.foreach:

사용하다array_column

print_r(array_column($array, 'firstname')); #returns the value associated with that key 'firstname'

또한 위 작업을 실행하기 전에 확인할 수 있습니다.

if(array_key_exists('firstname', $array)){
   print_r(array_column($array, 'firstname'));
}

기본적으로 각각의 표준은 당신의 경우에 mysql_fetch_associate와 같은 결과를 산출하지 않을까요?

해당 배열에서 foreach를 사용하면 'id', 'first name' 및 'last name'의 세 가지 키가 포함된 배열을 얻을 수 있습니다.

이는 각 행에 대해 mysql_fetch_associate가 (루프에서) 제공하는 것과 같아야 합니다.

foreach ($parsed as $key=> $poke)
{
    $insert = mysql_query("insert into soal 
                          (pertanyaan, a, b, c, d, e, jawaban)
                          values
                          ('$poke[question]',
                          '$poke[options][A]',
                          '$poke[options][B]',
                          '$poke[options][C]',
                          '$poke[options][D]',
                          '$poke[options][E]',
                          '$poke[answer]')");
}

배열 요소에 대해 문자열을 조작해야 하는 경우(예: callback 함수 array_walk_recursive(또는 array_walk))를 사용하는 것이 좋습니다.둘 다 SQL 문을 동적으로 작성할 때 유용합니다.

이 사용법에서는 각 요소에 쉼표와 줄을 추가해야 하는 배열을 사용합니다.

$some_array = [];

$some_array의
0: "배열의 일부 문자열"
1: "어레이의 또 다른 문자열"

php.net 기준

콜백이 배열의 실제 값과 함께 작동해야 하는 경우 콜백의 첫 번째 매개 변수를 참조로 지정합니다.그러면 해당 요소에 대한 변경 사항이 원래 배열 자체에서 수행됩니다.

array_walk_recursive($some_array, function (&$value, $key) {
    $value .= ",\n";
});

:
의 일부 부,\n"
열,\n"

array_walk를 사용하여 필드에 데이터베이스 테이블 이름을 추가하는 동일한 개념이 있습니다.

$fields = [];

$ 필드의 데이터:
0: "이름"
Name" 1: 성"

$tbl = "Employees"

array_walk($fields, 'prefixOnArray', $tbl.".");

function prefixOnArray(&$value, $key, $prefix) { 
    $value = $prefix.$value; 
}

:
"직원들.이름"
"직원들.성"


성능이 각 항목에 걸쳐 문제가 되는지 알고 싶지만, 소수의 요소가 포함된 어레이인 IMHO의 경우 고려할 가치가 거의 없습니다.

mysql 결과 집합 개체는 즉시 a 내에서 반복할 수 있습니다.이것은 어떤 종류의 전화를 할 필요가 없다는 것을 의미합니다.fetch*()php의 행 데이터에 액세스하기 위한 function/ method.단순히 결과 집합 객체를 입력 값으로 전달할 수 있습니다.foreach().

또한, PHP 7.1로부터, "어레이 파괴"는 당신이 (바람직하다면) 그 안에서 개별적인 값들을 만들 수 있게 해줍니다.foreach()선언.

모두 동일한 출력을 생성하는 예제를 모두 포함하지 않는 목록: (PHPize Sandbox)

foreach ($mysqli->query("SELECT id, firstname, lastname FROM your_table") as $row) {
    vprintf('%d: %s %s', $row);
}

foreach ($mysqli->query("SELECT * FROM your_table") as ['id' => $id, 'firstname' => $firstName, 'lastname' => $lastName]) {
    printf('%d: %s %s', $id, $firstName, $lastName);
}

*파괴하는 동안 모든 열을 나열할 필요는 없으며 액세스하려는 항목만 나열할 필요가 없습니다.


$result = $mysqli->query("SELECT * FROM your_table");
foreach ($result as $row) {
    echo "$row['id']: $row['firstname'] $row['lastname']";
}

언급URL : https://stackoverflow.com/questions/6413589/how-to-access-mysql-result-set-data-with-a-foreach-loop

반응형