Bienvenido a la Comunidad de Treehouse
¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.
¿Buscas aprender algo nuevo?
Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de
Inicia tu prueba gratuita
Matt Nickolls
9,895 puntosConfundido acerca de la función getCombinedIngredients
public function getCombinedIngredients()
{
$ingredients = array();
foreach ($this->recipes as $recipe) {
foreach ($recipe->getIngredients() as $ing) {
$item = $ing["item"];
if (strpos($item, ",")) {
$item = strstr($item, ",", true);
}
if (substr($item, -1) == "s" && array_key_exists(rtrim($item, "s"), $ingredients)) {
$item = rtrim($item, "s");
} else if (array_key_exists($item. "s", $ingredients)) {
$item .="s";
}
$ingredients[$ing["item"]] = array(
$ing["amount"],
$ing["measure"]
);
}
}
return $ingredients;
Bueno, así que el código anterior es, creo, el código exacto de la función getCombinedingredients demostrada en el vídeo. Lo he escrito manualmente siguiendo el vídeo. Lo he verificado una y otra vez. Pero sigo obteniendo tanto los elementos 'Huevos' como 'Huevos, Batidos' mostrados en el navegador, mientras que Alena solo obtiene un elemento singular 'Huevo'.
Esto es muy confuso. Pensé que tal vez la matriz $ingredients necesitaba ser desconfigurada porque estaba siendo modificada por cada ejecución sucesiva de código, pero ese no parece ser el caso.
En mi resultado parece que la primera declaración if, que se supone que solo debe devolver la porción de una cadena antes de una coma, no está funcionando. En el vídeo de Alena, todos los elementos que tienen contenido de cadena separado por una coma se han reducido a solo la porción antes de la coma. En mi código ninguno lo ha hecho. Así que el problema parece estar allí. ¿Ayuda?
Lo que lo hace más difícil de descubrir es que el código en los archivos descargables tiene una lógica diferente a la demostrada en el vídeo y es la siguiente:
public function getCombinedIngredients()
{
$ingredients = array();
foreach ($this->recipes as $recipe) {
foreach ($recipe->getIngredients() as $i) {
$item = $i['item'];
if (strpos($item, ",")) {
$item = strstr($item, ",", true);
}
if (in_array($item . "s", $ingredients)) {
$item .= "s";
} else if (in_array(substr($item,0,-1),$ingredients)) {
$item = substr($ingredient,0,-1);
}
$ingredients[$item][] = array($i["amount"],$i["measure"]);
}
}
return $ingredients;
}
usando esta lógica devuelve un plural 'Huevos'. En lugar de solo un singular 'Huevo' como en el vídeo.
Es un poco decepcionante ver que varios otros estudiantes han tenido la misma dificultad con este mismo código durante los últimos años y ningún representante de Treehouse ha proporcionado una respuesta o ha ayudado. Los estudiantes también comentan que los archivos descargables no coinciden con el vídeo, algunos hace tres años. ¿Y aún no se ha revisado? Es muy bueno tener material didáctico desafiante como este, pero es muy frustrante sentir que tienes que pasar adelante de un vídeo sin sentir que has entendido completamente la lógica. Por favor, ¿puede alguien amable de Treehouse ayudar aquí?
2 Respuestas
Jennifer Nordell
Profesor de TreehouseHola, Matt Nickolls! Sí, creo que tu lógica es acertada. Realmente no puedo responder qué pasó aquí, exactamente. Me parece que tal vez Alena estaba mostrando los resultados de un conjunto diferente de recetas a las que se les asignó la etiqueta "desayuno" o algo así. Sin embargo, si va al vídeo penúltimo y toma los archivos del proyecto de la sección "Descargas", encontrará que ejecutar cookbook.php también da un solo "Huevo" exactamente como obtienes.
Desearía poder ser de más ayuda, pero presentaré esto ante el equipo de educación para ver qué podemos hacer al respecto
¡Espero que esto te ayude!
Matt Nickolls
9,895 puntosGracias Jennifer, eso es muy amable. ¡Perdón por sonar como un gruñón! :)