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);