2015-08-16 3 views
1

Я пытаюсь сделать новый столбец с результатами запроса SQL в PHP:PHP/SQL ошибка доступа к массиву

$someArray= array(array('match'=>'123'), array('match'=>'456'), array('match'=>'789')); //arbitrary number of elements 
foreach($someArray as $key=>$item){ 
    $someArraysDouble[]=$item; 
} 
$someQuery="select count(*) as somecount from sometable"; 
$probe1=array(); 
$probe2="0"; 
$probe3="0"; 
$probe4="0"; 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB";//myDB uses MySQL 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
foreach($someArray as $key=>$item) { 
    $someQuery.=" where somecolumn like "%$item['match']%"; 
    $blahblah=$conn->query($someQuery); 
    if ($blahblah->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      $row['match']=$item['match']; 
      $probe1[]=$row; 
     } 
    } 
    $conn->close(); 
} 
foreach($someArraysDouble as $key1=>$item1) { 
    foreach($probe1 as $key2=>$item2) { 
     if($item2['match']==$item1['match']) { 
      $probe2=$item1['somecount']; 
      $probe3=$item2['somecount']; 
      $item1['somecount']=$item2['somecount']; 
      $probe4=$item1['somecount']; 
     } 
    } 
} 

Выходной HTML выглядит следующим образом:

<html> 
<head></head> 
<body> 
{$probe2}<br>{$probe3}<br>{$probe4}<br><br> 
{loop $probe1 $key1 $item1} 
{$item1['somecount']}<br><br> 
{/loop} 
<br><br> 
{loop $someArraysDouble $key2 $item2} 
{$item2['somecount']}<br><br> 
{/loop} 
</body> 
</html> 

Результат ... что-то не понимаю:
- $probe2 - null, который ожидается.
- $probe3 - это значение счета для последнего элемента, который ожидается.
- $probe4 - это значение счета для последнего элемента, который ожидается.
- Первый loop с $probe1 производит значение счета для каждого элемента, который ожидается.
- Второй loop с $someArraysDouble не производит ничего, что НЕ ожидается. КАК это может случиться?

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

+0

Код-раскраска показывает ошибку с '$ someQuery. =" Где somecolumn как "% $ item ['match']%"; 'Число/тип скобок не совпадают. Try:' $ someQuery. = «where somecolumn like«% $ item ['match']% '";' – MaggsWeb

+0

Где генерируется '$ someArray'?? – MaggsWeb

ответ

0

Оказывается, я не понимал, как foreach в PHP работает.

function array_generate(){ 
return array(array('match'=>'123'), array('match'=>'456'), array('match'=>'789')); //arbitrary number of elements 
} 
$someArray=array_generate(); 
var_dump($someArray); 
foreach($someArray as $heavy=>$load) 
{ 
    $load['addedvalue']="newvalue"; 
    $test1[$heavy]="newvalue"; 
    $test2[$heavy]=$load['addedvalue']; 
    var_dump($someArray); 
} 
var_dump($someArray); 
var_dump($test2); 

п + 2 var_dump($someArray) с (где п ==count($someArray)) все показывают то же самое.

array(3) { [0]=> array(1) { ["match"]=> string(3) "123" } [1]=> array(1) { ["match"]=> string(3) "456" } [2]=> array(1) { ["match"]=> string(3) "789" } } 

Но var_dump($test2) показывает:

array(3) { [0]=> string(8) "newvalue" [1]=> string(8) "newvalue" [2]=> string(8) "newvalue" } 

Это означает addedvalue каждый элемент $someArray не сохраняется один раз $key изменения. Поэтому мое решение заключается в использовании нового массива, который синхронизируется с исходным массивом по длине.

1

Я подозреваю, что эта линия не выполняет, как вы ожидаете, потому что вы не создали $someArraysDouble перед входом в цикл:

$someArraysDouble[]=$item; 

Попробуйте создать пустой массив первых, как это:

$someArraysDouble = array(); // <== Initialize the array first 

$someArray = array(array('match'=>'123'), array('match'=>'456'), 
       array('match'=>'789')); //arbitrary number of elements 
foreach($someArray as $key=>$item){ 
    $someArraysDouble[] = $item; 
} 

Дополнительную информацию см. В разделе PHP Array docs, в частности раздел «Создание/изменение с помощью синтаксиса с квадратной скобкой».

+0

После нескольких месяцев мне удалось решить проблему самостоятельно. Спасибо в любом случае. – Hakdo

+0

Вам следует опубликовать ваш ответ. Кто-то может столкнуться с этой проблемой. –

+1

Там. – Hakdo

Смежные вопросы