2013-04-10 1 views
1

Есть ли более простой способ взорвать одну часть массива в дополнительный массив, а не распаковывать массив, запустить функцию разрыва, а затем переупаковать массив, как показано ниже. Это прекрасно работает, я пытаюсь выяснить, есть ли более простой способ.Функция php Array. Попытка избежать распаковки массива, а затем переупаковка массива

public function getStandardizationTerms() 
    { 

     $statement = $this->db->query('SELECT * FROM '.$this->std_table); 
     $result = $statement->fetchAll(PDO::FETCH_ASSOC); 

     $new_result = array(); 
     foreach($result as $term) { 
      // the only purpose of this foreach loop is to turn the exception tables field into an array 
      $new_result[] = array(    
       'key'   => $term['key'], 
       'operator'  => $term['operator'], 
       'fragment'  => $term['fragment'], 
       'manufacturer' => $term['manufacturer'], 
       'is_exception' => $term['is_exception'], 
       'tables'  => explode(",",$term['tables']) 
      ); 

     }  
     return $new_result; 

    } 
+1

нормализовать БД, так что вы должны сделать, не имеют несколько независимых битов данных в одном поле. –

+0

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

+1

не имеет значения. подумайте о том, как уродливо найти конкретный бит данных в этой области. например '1 | 10 | 100 | 1000'. совпадение '100' не может быть просто' WHERE field LIKE% 100% ', потому что это будет соответствовать 1000. Затем удаляются значения, бла-бла-бла. Это ужасный дизайн, и в ближайшем будущем Укусит вас в задницу. –

ответ

0

Не могли бы вы просто ссылаться на поле напрямую?

<?php 
$myArray = Array ('field1' => "var1", 'field2' => "var2", 'field3' => "var3, var4, var5"); 
$myArray['field3'] = explode (",", $myArray['field3']); 
print_r ($myArray); 
?> 
0

нет необходимости создавать новый массив, если петля корыта $terms по ссылке

foreach($result as &$term) { 
    $term['tables'] = explode(",",$term['tables']); 
} 

Также смотрите на втором примере на http://php.net/manual/en/control-structures.foreach.php

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