Estoy obteniendo algunos datos de mysql en una matriz como esta
array( [0] = array( 'code' => '123456', 'title' => 'something', 'price' => '2.00', 'other_value' => '555555' ), [1] = array( 'code' => '123456', 'title' => 'something', 'price' => '2.00', 'other_value' => '666666' ), [2] = array( 'code' => '234567', 'title' => 'something else', 'price' => '3.00', 'other_value' => '333333' ), [3] = array( 'code' => '345678', 'title' => 'another thing', 'price' => '4.00', 'other_value' => NULL ), )lo que debo hacer es para cada fila, si el código clave aparece más de una vez, combine las filas en una pero cree una nueva matriz para el otro_valor así
array( [0] = array( 'code' => '123456', 'title' => 'something', 'price' => '2.00', 'other_value' => array( [0] => '555555', [1] => '666666' ) ), [1] = array( 'code' => '234567', 'title' => 'something else', 'price' => '3.00', 'other_value' => '333333' ), [2] = array( 'code' => '345678', 'title' => 'another thing', 'price' => '4.00', 'other_value' => NULL ), )¿Cuál es la mejor manera de lograr esto?
Pensé en recorrer cada fila y verificar la existencia de esa clave/valor y luego hacer algo si existe.
@AdRock espero que desee fusionar la matriz en caso de que el 'código' sea el mismo, si es así, intente debajo de uno:
<?php $arr = array( array( 'code' => '123456', 'title' => 'something', 'price' => '2.00', 'other_value' => '555555' ), array( 'code' => '123456', 'title' => 'something', 'price' => '2.00', 'other_value' => '666666' ), array( 'code' => '234567', 'title' => 'something else', 'price' => '3.00', 'other_value' => '333333' ), array( 'code' => '345678', 'title' => 'another thing', 'price' => '4.00', 'other_value' => NULL ) ); echo "<pre>"; print_r($arr);// array before $isExist = array(); foreach($arr as $key => $value){ if(in_array($value["code"], $isExist)){ $getKey = array_search($value["code"], $isExist); $arr[$getKey]["other_value"] = array($arr[$getKey]["other_value"], $value["other_value"]); unset($arr[$key]); } else{ $arr[$key] = $value; } $isExist[$key] = $value["code"]; } echo "<pre>"; print_r(array_values($arr));// array after ?>El enfoque que sugeriría es recorrer la matriz y almacenar el valor del code en una nueva matriz y almacenar todo el conjunto de resultados en una nueva matriz. Con cada iteración, verifique si el valor está presente o no en la matriz almacenada del valor del code . Y si se encuentra el valor, en ese caso, obtenga la clave de la matriz de code y use la misma clave para la matriz de resultados y guárdela dentro de other_value . Espero que tenga sentido.
Recorrer la matriz y crear una nueva matriz utilizando los valores de 'código' como claves podría ser el método más simple. En ese caso, puede verificar si la clave ya existe.
$new_array=array(); foreach($array as $part){ $code_as_key = $part['code']; //if code allready in the new array, just add a new value if( isset($new_array[$code_as_key]) ){ $new_array[$code_as_key]['other_value'][] = $part['other_value']; } //else add the new code else{ $new_array[$code_as_key]=$part; } } //re-index the new array, starting from key 0 $new_array=array_values($new_array);