2016-02-18 2 views
1

У меня есть два отдельных массива, которые я использую на моей странице php.PHP Найти данные в массиве

Первый содержит все имена полей, которые я буду использовать для создания заголовков html-таблиц в пользовательском интерфейсе.

массив данных для этого выглядит так:

Array 
(
[0] => Array 
    (
     [fieldID] => 2 
     [fieldName] => Project Title 
     [fieldAlias] => initiativeTitle 
    ) 

[1] => Array 
    (
     [fieldID] => 4 
     [fieldName] => Project Description (preview) 
     [fieldAlias] => initiativeDescriptionPreview 
    ) 

) 

Далее, у меня есть набор данных всех записей, мне нужно напечатать к столу. key в этом массиве соответствует fieldAlais из массива заголовков.

Моя цель здесь состоит в том, чтобы перебрать массив заголовков и получить fieldAlias, а затем перебрать данные и когда fieldAlias из строки заголовка соответствует ключу в строке данных, он распечатает его.

Вот как я заполнить массив заголовка:

$primaryArray = Array(); 
if(isset($dashboardDetails->results->primary->fields)){ 
    foreach($dashboardDetails->results->primary->fields as $p){ 
    $primaryArray[] = array(
     'fieldID' => (int)$p->fieldID, 
     'fieldName' => (string)$p->fieldName, 
     'fieldAlias' => (string)$p->alias 
    ); 
    } 
} 

Это является примером объекта данных:

SimpleXMLElement Object 
(
[data] => SimpleXMLElement Object 
    (
     [initiativeDescriptionPreview] => This is a test description 
     [initiativeTitle] => Test 
    ) 

Вот бардак я работаю с на HTML таблицы:

<table class="table table-hover table-striped"> 
     <thead> 
      <tr> 
      <?php 
       // Loop over the primary fields 
       for ($i = 0; $i < count($primaryArray); ++$i) { 
       echo '<th class="small">'.$primaryArray[$i]['fieldName'].'</th>'; 
       } 
      ?> 
      </tr> 
     </thead> 
     <tbody> 
      <?php 
       // For each field in our primary array 
       for ($i = 0; $i < count($primaryArray); ++$i) { 

       // Set our alais 
       $a = $primaryArray[$i]['fieldAlias']; 

       echo '<tr>'; 
        // Loop over all of the records 
        foreach($dashboard->data as $value){ 
         foreach($value as $key => $val){ 
          if($key == $a){ 
          echo '<td class="small">'.$val.'</td>'; 
          } 
         } 
        } 
       echo '</tr>'; 
       } 
      ?> 
     </tbody> 
</table> 

Результатом этого является то, что его печать двух строк данных, когда это должно быть одной и той же строки:

enter image description here

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

+0

Какой ключ в объект данных 'должен соответствовать fieldAlias' -' initiativeTitle'? –

+0

@LloydBanks Да, первый td будет инициативным титром, второе - описанием – SBB

ответ

1

Прежде всего, это не ясно, будет ли или нет массив данных - массив массивов, который должен быть.

Затем вы можете закодировать массив данных, значением которого является строка, с которой вы работаете. После этого вы можете петля массив заголовков, и распечатать элемент массива строк, который является ключевым соответствует значению элемента «fieldAlias» элемента заголовков массива, что ваш в настоящее время в

Пример:.

$headers = Array(
    Array(
     'fieldID' => 2, 
     'fieldName' => 'Project Title', 
     'fieldAlias' => 'initiativeTitle' 
    ), 
    Array(
     'fieldID' => 4, 
     'fieldName' => 'Project Description (preview)', 
     'fieldAlias' => 'initiativeDescriptionPreview' 
    ) 
); 

$results = new StdClass(); 
$results->data = Array(Array('initiativeDescriptionPreview' => 'This is a test description', 'initiativeTitle' => 'Test')); 

?> 
<table cellspacing="10" cellpadding="10"> 
    <tr> 
     <?php foreach($headers as $headerField): ?> 
      <th style="border:1px solid red"> 
       <?php echo $headerField['fieldName']; ?> 
      </th> 
     <?php endforeach; ?> 
    </tr> 
    <?php foreach($results->data as $row): ?> 

    <tr> 
     <?php foreach($headers as $headerField): ?> 
      <td> 
       <?php echo $row[$headerField['fieldAlias']]; ?> 
      </td> 
     <?php endforeach; ?> 
    </tr> 
    <?php endforeach; ?> 
</table> 

enter image description here

0

Полагает, что вы создаете новый элемент <tr> для каждого из ваших столбцов.

Я думаю, что ваш HTML выглядит примерно так:

<table class="table table-hover table-striped"> 
    <thead> 
    <tr> 
     <th class="small">some name</th> 
     <th class="small">some other name</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>value of column 1</td> 
    </tr> 
    <tr> 
     <td>value of column 2</td> 
    </tr> 
    </tbody> 
</table> 

Пожалуйста, обратите внимание, что вы, вероятно, будет ожидать только один <tr> элемент в вашем <tbody>

0

Я попытался создать массивы и объекты, которые вы описали с помощью прямого PHP-кода, чтобы я мог проверить свой подход. Я думаю, что вам вообще не нужен $ primaryArray.Вот мое полное решение:

<?php 
$headers = array(
    array("fieldID" => 2, "fieldName" => "Project Title", "fieldAlias" => "initiativeTitle"), 
    array("fieldID" => 4, "fieldName" => "Project Description (preview)", "fieldAlias" => "initiativeDescriptionPreview"), 
); 

class SimpleXMLElementObject { 
    public 
     $data; 
} 

$mySimpleXMLElementObject1 = new SimpleXMLElementObject; 
$mySimpleXMLElementObject2 = new SimpleXMLElementObject; 

$mySimpleXMLElementObject1->data = array(
    "initiativeDescriptionPreview" => "This is a test description", 
    "initiativeTitle" => "Test" 
); 

$mySimpleXMLElementObject2->data = array(
    "initiativeDescriptionPreview" => "This is a test description2", 
    "initiativeTitle" => "Test2" 
); 

$mySimpleXMLElementObjects = array(); 
$mySimpleXMLElementObjects[] = $mySimpleXMLElementObject1; 
$mySimpleXMLElementObjects[] = $mySimpleXMLElementObject2; 
?> 

<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <table class="table table-hover table-striped"> 
      <thead> 
<?php foreach($headers as $header) { ?> 
       <th class="small"><?= $header["fieldName"] ?></th> 
<?php } ?> 
      </thead> 
      <tbody> 
<?php foreach($mySimpleXMLElementObjects as $anObject) { ?> 
       <tr> 
<?php foreach($headers as $header) { ?> 
        <td class="small"><?= $anObject->data[$header["fieldAlias"]] ?></th> 
<?php } ?> 
       </tr> 
<?php } ?> 
      </tbody> 
     </table> 
    </body> 
</html> 

Результирующая таблица ниже:

<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <table class="table table-hover table-striped"> 
      <thead> 
       <th class="small">Project Title</th> 
       <th class="small">Project Description (preview)</th> 
      </thead> 
      <tbody> 
       <tr> 
        <td class="small">Test</th> 
        <td class="small">This is a test description</th> 
       </tr> 
       <tr> 
        <td class="small">Test2</th> 
        <td class="small">This is a test description2</th> 
       </tr> 
      </tbody> 
     </table> 
    </body> 
</html> 
Смежные вопросы