PHP/MySQL多维数组

PHP/MySQL多维数组,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我是多维数组的新手,遇到了一个问题,无法集中精力解决它。我一直在努力扭转这一局面: Array ( [1] => Array ( [cat_id] => 1 [cat_name] => Schilderijen [cat_description] => Omschrijving bij schilderijen [artists] => Array

我是多维数组的新手,遇到了一个问题,无法集中精力解决它。我一直在努力扭转这一局面:

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 ) ) )
我已经有一段时间没有使用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']);
  }
}
这是另一种方法(也可能不起作用)


第一个数组应该在循环外,第二个数组应该在循环内。使
$isSet=false
外部循环,然后内部循环添加
如果(!$isSet){firstArray…;$isSet=TRUE;}否则{secondArray…;}
您不应该在同一数组中使用具有不同值的相同数组键(artist_id,lastName)。感谢有关isSet的提示。这对我很有用:
foreach($stmt->fetchAll(PDO::FETCH_ASSOC)as$r){$artist[]=array('artist_id'=>$r['artist_id'],'lastName'=>$r['lastName']);}$stmt->execute;foreach($stmt->fetchAll(PDO::FETCH_ASSOC)as$r){if(!isset($category)){$category[]=array('cat_id'=>r['cat_id'],'cat_description'=>r['cat_description'],'artists'=>$artist);}
$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']);
}
$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']);
  }
}