我是多维数组的新手,遇到了一个问题,无法解决这个问题。我一直在努力改变这个:
Array ( [1] => Array ( [cat_id] => 1 [cat_name] => Schilderijen [cat_description] => Omschrijving bij schilderijen [artists] => Array ( [artist_id] => 1 [lastName] => ..some value ) ) ) Array ( [1] => Array ( [cat_id] => 1 [cat_name] => Schilderijen [cat_description] => Omschrijving bij schilderijen [artists] => Array ( [artist_id] => 4 [lastName] => ..some value ) ) )
into something like this, so I can call a category and list the related artists underneath:
Array ( [1] => Array ( [cat_id] => 1 [cat_name] => Schilderijen [cat_description] => Omschrijving bij schilderijen [artists] => Array ( [artist_id] => 1 [lastName] => ..some value [artist_id] => 4 [lastName] => ..some value ) ) )
I am using the following code:
$cat_id = 1;
$query = "SELECT * FROM `categorie_has_artists` ";
$query .= " JOIN `categories` ON categories.cat_id = categorie_has_artists.cat_id AND categorie_has_artists.cat_id = :cat_id";
$query .= " JOIN `artists` ON artists.artist_id = categorie_has_artists.artist_id";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':cat_id', $cat_id, PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$array[$row['cat_id']] = array('cat_id' => $row['cat_id'], 'cat_name' => $row['cat_name'], 'cat_description' => $row['cat_description'], 'artist' => array());
$array[$row['cat_id']]['artist'][] = array('artist_id'=>$row['artist_id'], 'lastName' => $row['lastName']);
}
最佳答案
我有一段时间没有使用 PHP,这可能行不通。
更好的方法是检查是否存在至少一个艺术家子数组而不是 $isSet
标志
$cat_id = 1;
$query = "SELECT * FROM `categorie_has_artists` ";
$query .= " JOIN `categories` ON categories.cat_id = categorie_has_artists.cat_id AND categorie_has_artists.cat_id = :cat_id";
$query .= " JOIN `artists` ON artists.artist_id = categorie_has_artists.artist_id";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':cat_id', $cat_id, PDO::PARAM_INT);
$stmt->execute();
$isSet = FALSE;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if(!$isSet) {
$array[$row['cat_id']] = array('cat_id' => $row['cat_id'], 'cat_name' => $row['cat_name'], 'cat_description' => $row['cat_description'], 'artist' => array());
$isSet = TRUE;
} else {
$array[$row['cat_id']]['artist'][] = array('artist_id'=>$row['artist_id'], 'lastName' => $row['lastName']);
}
}
这是另一种方法(也可能行不通)
$cat_id = 1;
$query = "SELECT * FROM `categorie_has_artists` ";
$query .= " JOIN `categories` ON categories.cat_id = categorie_has_artists.cat_id AND categorie_has_artists.cat_id = :cat_id";
$query .= " JOIN `artists` ON artists.artist_id = categorie_has_artists.artist_id";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':cat_id', $cat_id, PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if(!isset($array[$row['cat_id']][$row['cat_name']][$row['cat_description']])) {
$array[$row['cat_id']] = array('cat_id' => $row['cat_id'], 'cat_name' => $row['cat_name'], 'cat_description' => $row['cat_description'], 'artist' => array());
} else {
$array[$row['cat_id']]['artist'][] = array('artist_id'=>$row['artist_id'], 'lastName' => $row['lastName']);
}
}
关于PHP/MySQL 多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20933685/